{"version":3,"sources":["components/Layout.js","Encoder.js","timestamp/TimestampParser.js","Hashing.js","hooks/usePost.js","components/ValidationResponse.js","components/StyledDropzone.js","components/Home.js","App.js","registerServiceWorker.js","index.js","assets/GraficosCC3.png","assets/GraficosCC.png","assets/GraficosCC2.png"],"names":["Layout","style","padding","Container","this","props","children","Component","displayName","name","readFileAsArrayBuffer","file","Promise","resolve","reject","fileReader","FileReader","addEventListener","result","readAsArrayBuffer","a","buffer","Uint8Array","reduce","data","byte","String","fromCharCode","readFileAsDer","binaryToBase64","binaryString","forge","util","encode64","TimestampParser","stamp","asn1","fromDer","getHashOID","tstInfoEncoded","value","messageImprint","derToOid","trim","Hash","oid","digestAsBase64","binaryData","md","sha256","create","sha384","sha512","getDigestFunction","update","digest","getDigestName","DATE_OPTIONS","weekday","year","month","day","hour","minute","timeZoneName","hour12","pdfMake","vfs","pdfFonts","Property","label","rest","Row","marginTop","Col","className","HashProperty","fontWeight","HashError","d","error","split","hashOriginal","length","hashSello","Fragment","borderBottom","wordBreak","ValidationResponse","resetPost","response","display","Button","onClick","marginRight","borderRadius","marginLeft","color","boxShadow","backgroundColor","borderColor","now","Date","dia","getDate","mes","getMonth","anio","getFullYear","seconds","getSeconds","minutes","getMinutes","getHours","errorSplit","pdfInfoInvalido","content","canvas","type","x","y","w","h","r","text","absolutePosition","table","headerRows","widths","body","bold","layout","lineColor","styles","alignment","validheader","fontSize","createPdf","download","pdfInfoValido","responseStatus","genTime","toLocaleDateString","fechaValidacion","signer","serialNumber","policy","hashAlgorithm","originalHash","hash","image","width","images","greenDone","borderStyle","borderWidth","margin","id","height","borderCollapse","includes","map","l","background","src","iconos3","alt","baseStyle","cursor","flex","flexDirection","alignItems","transition","activeStyle","acceptStyle","rejectStyle","StyledDropzone","secondaryLabel","params","useDropzone","maxFiles","acceptedFiles","getRootProps","getInputProps","isDragActive","isDragAccept","isDragReject","useMemo","iconos1","iconos2","e","preventDefault","Home","useState","setError","original","files","setFiles","url","working","state","setState","fetch","method","headers","JSON","stringify","json","responseJson","console","post","resetResponse","usePost","onOriginalDrop","useCallback","onStampDrop","handleClickValidate","Encoder","stampBinary","stampBase64","stampParser","hashOid","fileBinary","fileHash","B64Stamp","border","boxSizing","maxWidth","Form","Alert","onDrop","accept","size","disabled","App","exact","path","component","isLocalhost","Boolean","window","location","hostname","match","registerValidSW","swUrl","navigator","serviceWorker","register","then","registration","onupdatefound","installingWorker","installing","onstatechange","controller","log","catch","baseUrl","document","getElementsByTagName","getAttribute","rootElement","getElementById","ReactDOM","render","basename","URL","process","origin","status","get","indexOf","ready","unregister","reload","checkValidServiceWorker","registerServiceWorker","module","exports"],"mappings":"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","file":"static/js/main.941d0991.chunk.js","sourcesContent":["import React, { Component } from 'react';\r\nimport { Container } from 'reactstrap';\r\n\r\nexport class Layout extends Component {\r\n static displayName = Layout.name;\r\n\r\n render () {\r\n return (\r\n
\r\n \r\n {this.props.children}\r\n \r\n
\r\n );\r\n }\r\n}\r\n","import forge from 'node-forge';\n\nfunction readFileAsArrayBuffer(file) {\n return new Promise((resolve, reject) => {\n const fileReader = new FileReader();\n fileReader.addEventListener('load', function() {\n resolve(fileReader.result)\n }, false)\n fileReader.readAsArrayBuffer(file)\n })\n }\n\nasync function readFileAsDer(file) {\n const buffer = await readFileAsArrayBuffer(file);\n return (new Uint8Array(buffer).reduce(function (data, byte) {\n return data + String.fromCharCode(byte);\n }, ''));\n}\n\nfunction binaryToBase64(binaryString) {\n return forge.util.encode64(binaryString)\n}\n\nexport default {\n readFileAsArrayBuffer, readFileAsDer, binaryToBase64\n}","import forge from 'node-forge'\n\nexport default function TimestampParser(file) {\n\n const stamp = forge.asn1.fromDer(file)\n\n function getHashOID() {\n //https://tools.ietf.org/html/rfc5652#section-5.1\n // SignedData ::= SEQUENCE {\n // version CMSVersion,\n // digestAlgorithms DigestAlgorithmIdentifiers,\n // encapContentInfo EncapsulatedContentInfo,\n // certificates [0] IMPLICIT CertificateSet OPTIONAL,\n // crls [1] IMPLICIT RevocationInfoChoices OPTIONAL,\n // signerInfos SignerInfos }\n const signedData = stamp.value[1];\n const encapContentInfo = signedData.value[1].value[0].value[2];\n const tstInfoEncoded = encapContentInfo.value[1].value[0].value\n //https://tools.ietf.org/html/rfc3161\n // TSTInfo ::= SEQUENCE {\n // version INTEGER { v1(1) },\n // policy TSAPolicyId,\n // messageImprint MessageImprint,\n // -- MUST have the same value as the similar field in\n // -- TimeStampReq\n // serialNumber INTEGER,\n // -- Time-Stamping users MUST be ready to accommodate integers\n // -- up to 160 bits.\n // genTime GeneralizedTime,\n // accuracy Accuracy OPTIONAL,\n // ordering BOOLEAN DEFAULT FALSE,\n // nonce INTEGER OPTIONAL,\n // -- MUST be present if the similar field was present\n // -- in TimeStampReq. In that case it MUST have the same value.\n // tsa [0] GeneralName OPTIONAL,\n // extensions [1] IMPLICIT Extensions OPTIONAL }\n const tstInfo = forge.asn1.fromDer(tstInfoEncoded);\n // MessageImprint ::= SEQUENCE {\n // hashAlgorithm AlgorithmIdentifier,\n // hashedMessage OCTET STRING } \n const messageImprint = tstInfo.value[2];\n const hashAlgorithm = forge.asn1.derToOid(messageImprint.value[0].value[0].value)\n return hashAlgorithm.trim();\n // forge.asn1.derToOid(forge.asn1.fromDer(a.value[1].value[1].value[0].value[2].value[1].value[0].value).value[2].value[0].value[0].value)\n }\n\n return {\n getHashOID\n }\n\n}","import forge from 'node-forge';\n\nexport default function Hash(oid) {\n\n function getDigestName() {\n switch(oid) {\n case '2.16.840.1.101.3.4.2.1': {\n return 'SHA 256';\n }\n case '2.16.840.1.101.3.4.2.2': {\n return 'SHA 384';\n }\n case '2.16.840.1.101.3.4.2.3': {\n return 'SHA 512';\n }\n default: {\n return null;\n }\n }\n } \n\n function getDigestFunction() {\n switch(oid) {\n case '2.16.840.1.101.3.4.2.1': {\n return forge.md.sha256.create(); \n }\n case '2.16.840.1.101.3.4.2.2': {\n return forge.md.sha384.create();\n }\n case '2.16.840.1.101.3.4.2.3': {\n return forge.md.sha512.create();\n }\n default: {\n return null;\n }\n }\n } \n\n function digestAsBase64(binaryData) {\n const md = getDigestFunction();\n \n if(md == null) {\n return null;\n }\n\n md.update(binaryData);\n const digest = md.digest();\n return forge.util.encode64(digest.data);\n }\n\n return {\n digestAsBase64, getDigestName\n }\n\n}","import React, { useState } from 'react'\nconst DATE_OPTIONS = { weekday: 'short', year: 'numeric', month: 'short', day: 'numeric', hour:'numeric', minute:'numeric', timeZoneName:'short', hour12:false }\n\nexport default function usePost(url) {\n\n const [state, setState] = useState({\n working: false,\n response: null,\n error: null\n })\n\n function resetResponse() {\n setState({\n working: false,\n response: null,\n error: null\n });\n }\n\n async function post(data) {\n try {\n setState({\n working: true,\n response: null,\n error: null\n })\n const response = await fetch(url, {\n method: 'POST',\n headers: {'Content-Type':'application/json'},\n body: JSON.stringify(data)\n })\n const responseJson = await response.json();\n\n responseJson.fechaValidacion = new Date().toLocaleDateString('es-MX', DATE_OPTIONS);\n\n setState({\n working: false,\n response: responseJson,\n error: null\n })\n } catch(e) {\n setState({\n working: false,\n response: null,\n error: 'Error contactando al servidor'\n })\n console.error(e);\n }\n }\n\n return {\n post, resetResponse, ...state\n }\n\n}","import React from 'react';\nimport { Button, Col, Row } from 'reactstrap';\nimport Hash from '../Hashing';\nimport iconos3 from '../assets/GraficosCC3.png';\nimport pdfMake from \"pdfmake/build/pdfmake\";\nimport pdfFonts from \"pdfmake/build/vfs_fonts\";\npdfMake.vfs = pdfFonts.pdfMake.vfs;\n\n\nconst VALID_BACKGROUND = '#FFFFFF';\nconst INVALID_BACKGROUND = '#FFFFFF';\n\nconst DATE_OPTIONS = { weekday: 'short', year: 'numeric', month: 'short', day: 'numeric', hour:'numeric', minute:'numeric', timeZoneName:'short', hour12:false }\n\nfunction Property({label, children, ...rest}) {\n return (\n
\n \n \n
{label}
\n \n \n
{children}

\n \n
\n
\n )\n}\n\nfunction HashProperty({label, children, ...rest}) {\n return (\n
\n \n \n
{label}
\n
{children}

\n \n
\n
\n )\n}\n\nfunction HashError({error}) {\n const d = error.split('\\n');\n const hashOriginal = d[1].split(' ')[d[1].split(' ').length - 1]\n const hashSello = d[2].split(' ')[d[2].split(' ').length - 1]\n\n return (\n \n {hashOriginal}\n {hashSello}\n \n )\n}\n \nexport default function ValidationResponse({resetPost, response}) {\n\n function resetPostN() {\n resetPost();\n }\n\n function createPDF() {\n //const input = document.getElementById('pdfTable');\n\n let now = new Date();\n let dia = now.getDate();\n let mes = now.getMonth() + 1;\n let anio = now.getFullYear();\n\n let seconds = now.getSeconds();\n let minutes = now.getMinutes();\n let hour = now.getHours();\n\n //const imgData = canvas.toDataURL('image/png');\n if(!response.error) {\n var pdfInfoValido = {\n content: [\n {\n canvas: [\n {\n type: 'rect',\n x: 0,\n y: 0,\n w: 520,\n h: 50,\n r: 5,\n color: '#87B359'\n },\n ]\n },\n ' ',\n {text: 'Es válido', style: 'validheader', absolutePosition: {x: 45, y: 50}},\n {\n canvas: [\n {\n type: 'rect',\n x: 0,\n y: 0,\n w: 520,\n h: 240,\n r: 5,\n lineColor: 'black',\n },\n ]\n },\n {\n style: 'table',\n table: {\n headerRows: 0,\n widths: [ '*','*'],\n body: [\n ['Estatus', response.responseStatus],\n ['Fecha de generación', new Date(response.genTime).toLocaleDateString('es-MX', DATE_OPTIONS)],\n ['Fecha de validación', response.fechaValidacion],\n ['Autoridad', response.signer],\n ['Número de serie', response.serialNumber],\n ['Política', response.policy],\n ['Algoritmo del hash', Hash(response.hashAlgorithm).getDigestName()],\n ]\n },\n layout: 'lightHorizontalLines',\n absolutePosition: {x: 45, y: 110}\n },\n {\n style: 'table',\n table: {\n headerRows: 0,\n widths: [ '*'],\n body: [\n [ {text: ['Hash calculado del documento\\n', {text: response.originalHash, bold:true}]} ],\n [ {text: ['Hash leído del documento\\n', {text: response.hash, bold:true}]} ],\n [ {\n image: 'greenDone',\n width: 30\n }]\n ]\n },\n layout: 'lightHorizontalLines',\n absolutePosition: {x: 45, y: 380}\n },\n { text: \"\\n\", style: \"center\" },\n { text: \"\\n\", style: \"center\" },\n {\n canvas: [\n {\n type: 'rect',\n x: 0,\n y: 0,\n w: 530,\n h: 110,\n r: 5,\n lineColor: 'black',\n },\n ]\n },\n ],\n styles: {\n table: {\n alignment:'center'\n },\n validheader: {\n fontSize: 22,\n bold: true,\n color:'white',\n alignment:'center',\n }\n },\n images: {\n greenDone: \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACsAAAAqCAYAAAAqAaJlAAAACXBIWXMAAAsSAAALEgHS3X78AAACvUlEQVRYhc2ZPW7bQBCFX4QUCWBALp3KLpLaukF4gC2cdhvRJwjdsXQ6dtENTDVsowDsI50gVp/C7lIqJ1AwxCy9pJf/u6QeQOgHIvfTcHbnzfLN8XjEEEWpPAPwEcCCL/MJwBm//82vf+gIRfJ3yFi9YKNUXgG4AeADuO5w6h7AFsAqFMlT13E7wTLkPYBl14EM+knXCkXyaBU2SuU5Q361AFnWGkAQiuQwGDZKJeVi3PF2d9UzpVVTlGcNoDecYy5BSZc0GaNU+nU/qoTlE38AmDvBM+uhDtiYBlEqPQC/RoQs6zYUSVz+8hUsz/jHkSNa1j8AXjmHTWkQTwwKHj/mVShXATZKZQDg8yR4r0WTOtC/zdOA/8XTCURVF6XDQlU7PbL+yKDPfNRprkdXhw0aTrSpPRufBb+vk69yN4PlKnU5IijN9AOX2E3D7+dsmvLI1lYOi8pB8RKkNnfU02G9iUC3LedJFtlsNYhSOcyBuwVVej9jp+9StPz4Gug552nXleeC0uBtD9A7AF8YpE6Fssmg256T+V0v0FAkK7xYyCrDUwXa125e1PrZCuUrRygSGvx2BNBMfWCvo1Tm9o2tnA7sBBTAoQ8saVkB7Ao0gx26dK1DkRgLimVQ0gcV2SZDUaUl20qTVjZ7N9ogUbDbAdf5Xu6bOEVs7C0o7aBNsCGw0Bs9B6BQZmemfxioB85926BFWC6Fa/tjWNHO1CncnyhszpXDMv2pRXfHVTJTuSgELczJmCosiwVYzt2xuoYm3TVucoQi2ZxAOqyVs9Nl9AZcQqcC3lf1ZZVGZiLgQvtTVpvN5JWjHe+yKk2RUttteo837FzsLagerbGKtvKzvNZRR/rN8tJGaXbVBhR9Hi2xTw14iesTabKjdJfiro+XBj204/6fUoQO2oQ2+VeCIyi6O5suj5IKAvAfxpIwYoKFhMYAAAAASUVORK5CYII=\"\n }\n }\n\n pdfMake.createPdf(pdfInfoValido).download(\"reporte-validacion-\"+dia+\"\"+mes+\"\"+anio+\"-\"+hour+\"\"+minutes+\"\"+seconds);\n } else {\n let errorSplit = response.error.split('\\n');\n let hOriginal = errorSplit[1].split(' ')[errorSplit[1].split(' ').length - 1]\n let hSello = errorSplit[2].split(' ')[errorSplit[2].split(' ').length - 1]\n\n var pdfInfoInvalido = {\n content: [\n {\n canvas: [\n {\n type: 'rect',\n x: 0,\n y: 0,\n w: 520,\n h: 50,\n r: 5,\n color: '#ff3636'\n },\n ]\n },\n ' ',\n {text: 'Es inválido', style: 'validheader', absolutePosition: {x: 45, y: 50}},\n {\n style: 'table',\n table: {\n headerRows: 0,\n widths: [ '*'],\n body: [\n [ {text: ['Hash calculado del documento\\n', {text: hOriginal, bold:true}]} ],\n [ {text: ['Hash leído del documento\\n', {text: hSello, bold:true}]} ],\n ]\n },\n layout: 'lightHorizontalLines',\n absolutePosition: {x: 45, y: 150}\n },\n { text: \"\\n\", style: \"center\" },\n { text: \"\\n\", style: \"center\" },\n {\n canvas: [\n {\n type: 'rect',\n x: 0,\n y: 0,\n w: 530,\n h: 110,\n r: 5,\n lineColor: 'black',\n },\n ]\n },\n ],\n styles: {\n table: {\n alignment:'center'\n },\n validheader: {\n fontSize: 22,\n bold: true,\n color:'white',\n alignment:'center',\n }\n }\n }\n \n pdfMake.createPdf(pdfInfoInvalido).download(\"reporte-validacion-\"+dia+\"\"+mes+\"\"+anio+\"-\"+hour+\"\"+minutes+\"\"+seconds);\n }\n }\n\n \n\n return (\n
\n

{response.error ? 'Inválido' : 'Validado'}

\n
\n
\n \n \n
\n
\n {\n response.error ?\n
\n
\n
Es inválido
\n
\n \n \n \n \n {\n response.error.includes('El archivo original no corresponde con la constancia de conservación') ?\n : \n response.error.split('\\n')\n .map(l => (\n
\n {l}
\n
\n ))\n }\n \n
\n
\n
:\n
\n
\n
Es válido
\n
\n \n \n \n \n \n \n \n \n \n \n \n \n
{response.responseStatus}
{new Date(response.genTime).toLocaleDateString('es-MX', DATE_OPTIONS)}
{new Date().toLocaleDateString('es-MX', DATE_OPTIONS)}
{response.signer}
{response.serialNumber}
{response.policy}
{response.hashAlgorithm} - { Hash(response.hashAlgorithm).getDigestName() }
\n
\n \n \n \n \n \n \n \n \n \n \n
{response.originalHash}
{response.hash}
\n
\n Los datos coinciden\n
\n \"iconos3\"\n
\n
\n
\n
\n
\n }\n
\n )\n\n}","import React, {useMemo} from 'react';\nimport {useDropzone} from 'react-dropzone';\nimport { Button } from 'reactstrap';\nimport iconos1 from '../assets/GraficosCC.png';\nimport iconos2 from '../assets/GraficosCC2.png';\nimport iconos3 from '../assets/GraficosCC3.png';\n\nconst baseStyle = {\n cursor:'pointer',\n flex: 1,\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n padding: '40px',\n borderWidth: 2,\n borderRadius: 2,\n borderColor: '#bababa',\n borderStyle: 'dashed',\n //backgroundColor: '#fafafa',\n //outline: 'none',\n transition: 'border .24s ease-in-out'\n};\n\nconst activeStyle = {\n borderColor: '#007bff'\n};\n\nconst acceptStyle = {\n borderColor: '#007bff'\n};\n\nconst rejectStyle = {\n borderColor: '#ff1744'\n};\n\nexport default function StyledDropzone({secondaryLabel, label, type, ...params}) {\n const {\n acceptedFiles,\n getRootProps,\n getInputProps,\n isDragActive,\n isDragAccept,\n isDragReject\n } = useDropzone({...params, maxFiles:1});\n\n const style = useMemo(() => ({\n ...baseStyle,\n ...(isDragActive ? activeStyle : {}),\n ...(isDragAccept ? acceptStyle : {}),\n ...(isDragReject ? rejectStyle : {})\n }), [\n isDragActive,\n isDragReject,\n isDragAccept\n ]);\n\n return (\n
\n
\n \n {\n acceptedFiles.length > 0 ?\n
\n
{secondaryLabel}
\n
\n \"iconos3\"\n
\n
\n \n
\n :\n
\n
{label}
\n
\n {\n type === \"any\" ? \"iconos1\" : \"iconos2\"\n }\n
\n
\n \n
\n }\n
\n
\n );\n}","import React, { useCallback, useState } from 'react';\r\nimport { Form, Button, Alert, Container, Row, Col } from 'reactstrap';\r\nimport Encoder from '../Encoder'\r\nimport TimestampParser from '../timestamp/TimestampParser';\r\nimport Hash from '../Hashing';\r\nimport usePost from '../hooks/usePost';\r\nimport ValidationResponse from './ValidationResponse';\r\nimport StyledDropzone from './StyledDropzone'\r\n\r\nexport default function Home() {\r\n\r\n\r\n const [error, setError] = useState('')\r\n const [files, setFiles] = useState({\r\n stamp: null,\r\n original: null\r\n })\r\n const {post, resetResponse, working, error :serverError, response } = usePost('/verifier')\r\n\r\n\r\n function resetPost() {\r\n resetResponse();\r\n }\r\n\r\n const onOriginalDrop = useCallback(acceptedFiles => {\r\n setFiles({\r\n ...files,\r\n original: acceptedFiles[0]\r\n })\r\n }, [files])\r\n\r\n const onStampDrop = useCallback(acceptedFiles => {\r\n setFiles({\r\n ...files,\r\n stamp: acceptedFiles[0]\r\n })\r\n }, [files])\r\n\r\n async function handleClickValidate(e) {\r\n if(!files.stamp || !files.original) {\r\n setError('Por favor selecciona los dos archivos')\r\n return;\r\n }\r\n\r\n setError('')\r\n\r\n const stampBinary = await Encoder.readFileAsDer(files.stamp)\r\n const stampBase64 = Encoder.binaryToBase64(stampBinary);\r\n\r\n let hashOid;\r\n try {\r\n const stampParser = TimestampParser(stampBinary);\r\n hashOid = stampParser.getHashOID();\r\n } catch(e) {\r\n setError('Constancia de tiempo malformada')\r\n return;\r\n }\r\n \r\n const fileBinary = await Encoder.readFileAsDer(files.original);\r\n const fileHash = Hash(hashOid).digestAsBase64(fileBinary);\r\n\r\n if(!fileHash) {\r\n setError('No se pudo generar el hash del archivo con el algoritmo indicado: ' + hashOid)\r\n return;\r\n }\r\n\r\n post({\r\n B64Stamp: stampBase64,\r\n Hash: fileHash\r\n })\r\n\r\n setFiles({\r\n stamp: null, original: null\r\n })\r\n\r\n }\r\n\r\n return (\r\n
\r\n \r\n \r\n
\r\n {\r\n !response ? \r\n

Validar

\r\n
\r\n
Arrastra los archivos que quieres validar dentro de los recuadros.
\r\n
\r\n
\r\n {\r\n error ? {error} : null\r\n }\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n {\r\n !files.stamp || !files.original ? \r\n \r\n :\r\n \r\n \r\n \r\n }\r\n
: \r\n { \r\n error ? {error} \r\n : \r\n } \r\n \r\n }\r\n {}\r\n

\r\n {\r\n\r\n }\r\n {} \r\n
\r\n
\r\n
\r\n );\r\n\r\n}","import React, { Component } from 'react';\r\nimport { Route } from 'react-router';\r\nimport { Layout } from './components/Layout';\r\nimport Home from './components/Home';\r\n\r\nimport './custom.css'\r\n\r\nexport default class App extends Component {\r\n static displayName = App.name;\r\n\r\n render () {\r\n return (\r\n \r\n \r\n \r\n );\r\n }\r\n}\r\n","// In production, we register a service worker to serve assets from local cache.\r\n\r\n// This lets the app load faster on subsequent visits in production, and gives\r\n// it offline capabilities. However, it also means that developers (and users)\r\n// will only see deployed updates on the \"N+1\" visit to a page, since previously\r\n// cached resources are updated in the background.\r\n\r\n// To learn more about the benefits of this model, read https://goo.gl/KwvDNy.\r\n// This link also includes instructions on opting out of this behavior.\r\n\r\nconst isLocalhost = Boolean(\r\n window.location.hostname === 'localhost' ||\r\n // [::1] is the IPv6 localhost address.\r\n window.location.hostname === '[::1]' ||\r\n // 127.0.0.1/8 is considered localhost for IPv4.\r\n window.location.hostname.match(\r\n /^127(?:\\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/\r\n )\r\n);\r\n\r\nexport default function register () {\r\n if (process.env.NODE_ENV === 'production' && 'serviceWorker' in navigator) {\r\n // The URL constructor is available in all browsers that support SW.\r\n const publicUrl = new URL(process.env.PUBLIC_URL, window.location);\r\n if (publicUrl.origin !== window.location.origin) {\r\n // Our service worker won't work if PUBLIC_URL is on a different origin\r\n // from what our page is served on. This might happen if a CDN is used to\r\n // serve assets; see https://github.com/facebookincubator/create-react-app/issues/2374\r\n return;\r\n }\r\n\r\n window.addEventListener('load', () => {\r\n const swUrl = `${process.env.PUBLIC_URL}/service-worker.js`;\r\n\r\n if (isLocalhost) {\r\n // This is running on localhost. Lets check if a service worker still exists or not.\r\n checkValidServiceWorker(swUrl);\r\n } else {\r\n // Is not local host. Just register service worker\r\n registerValidSW(swUrl);\r\n }\r\n });\r\n }\r\n}\r\n\r\nfunction registerValidSW (swUrl) {\r\n navigator.serviceWorker\r\n .register(swUrl)\r\n .then(registration => {\r\n registration.onupdatefound = () => {\r\n const installingWorker = registration.installing;\r\n installingWorker.onstatechange = () => {\r\n if (installingWorker.state === 'installed') {\r\n if (navigator.serviceWorker.controller) {\r\n // At this point, the old content will have been purged and\r\n // the fresh content will have been added to the cache.\r\n // It's the perfect time to display a \"New content is\r\n // available; please refresh.\" message in your web app.\r\n console.log('New content is available; please refresh.');\r\n } else {\r\n // At this point, everything has been precached.\r\n // It's the perfect time to display a\r\n // \"Content is cached for offline use.\" message.\r\n console.log('Content is cached for offline use.');\r\n }\r\n }\r\n };\r\n };\r\n })\r\n .catch(error => {\r\n console.error('Error during service worker registration:', error);\r\n });\r\n}\r\n\r\nfunction checkValidServiceWorker (swUrl) {\r\n // Check if the service worker can be found. If it can't reload the page.\r\n fetch(swUrl)\r\n .then(response => {\r\n // Ensure service worker exists, and that we really are getting a JS file.\r\n if (\r\n response.status === 404 ||\r\n response.headers.get('content-type').indexOf('javascript') === -1\r\n ) {\r\n // No service worker found. Probably a different app. Reload the page.\r\n navigator.serviceWorker.ready.then(registration => {\r\n registration.unregister().then(() => {\r\n window.location.reload();\r\n });\r\n });\r\n } else {\r\n // Service worker found. Proceed as normal.\r\n registerValidSW(swUrl);\r\n }\r\n })\r\n .catch(() => {\r\n console.log(\r\n 'No internet connection found. App is running in offline mode.'\r\n );\r\n });\r\n}\r\n\r\nexport function unregister () {\r\n if ('serviceWorker' in navigator) {\r\n navigator.serviceWorker.ready.then(registration => {\r\n registration.unregister();\r\n });\r\n }\r\n}\r\n","import 'bootstrap/dist/css/bootstrap.css';\r\nimport React from 'react';\r\nimport ReactDOM from 'react-dom';\r\nimport { BrowserRouter } from 'react-router-dom';\r\nimport App from './App';\r\nimport registerServiceWorker from './registerServiceWorker';\r\n\r\nconst baseUrl = document.getElementsByTagName('base')[0].getAttribute('href');\r\nconst rootElement = document.getElementById('root');\r\n\r\nReactDOM.render(\r\n \r\n \r\n ,\r\n rootElement);\r\n\r\nregisterServiceWorker();\r\n\r\n","module.exports = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACsAAAAqCAYAAAAqAaJlAAAACXBIWXMAAAsSAAALEgHS3X78AAACvUlEQVRYhc2ZPW7bQBCFX4QUCWBALp3KLpLaukF4gC2cdhvRJwjdsXQ6dtENTDVsowDsI50gVp/C7lIqJ1AwxCy9pJf/u6QeQOgHIvfTcHbnzfLN8XjEEEWpPAPwEcCCL/MJwBm//82vf+gIRfJ3yFi9YKNUXgG4AeADuO5w6h7AFsAqFMlT13E7wTLkPYBl14EM+knXCkXyaBU2SuU5Q361AFnWGkAQiuQwGDZKJeVi3PF2d9UzpVVTlGcNoDecYy5BSZc0GaNU+nU/qoTlE38AmDvBM+uhDtiYBlEqPQC/RoQs6zYUSVz+8hUsz/jHkSNa1j8AXjmHTWkQTwwKHj/mVShXATZKZQDg8yR4r0WTOtC/zdOA/8XTCURVF6XDQlU7PbL+yKDPfNRprkdXhw0aTrSpPRufBb+vk69yN4PlKnU5IijN9AOX2E3D7+dsmvLI1lYOi8pB8RKkNnfU02G9iUC3LedJFtlsNYhSOcyBuwVVej9jp+9StPz4Gug552nXleeC0uBtD9A7AF8YpE6Fssmg256T+V0v0FAkK7xYyCrDUwXa125e1PrZCuUrRygSGvx2BNBMfWCvo1Tm9o2tnA7sBBTAoQ8saVkB7Ao0gx26dK1DkRgLimVQ0gcV2SZDUaUl20qTVjZ7N9ogUbDbAdf5Xu6bOEVs7C0o7aBNsCGw0Bs9B6BQZmemfxioB85926BFWC6Fa/tjWNHO1CncnyhszpXDMv2pRXfHVTJTuSgELczJmCosiwVYzt2xuoYm3TVucoQi2ZxAOqyVs9Nl9AZcQqcC3lf1ZZVGZiLgQvtTVpvN5JWjHe+yKk2RUttteo837FzsLagerbGKtvKzvNZRR/rN8tJGaXbVBhR9Hi2xTw14iesTabKjdJfiro+XBj204/6fUoQO2oQ2+VeCIyi6O5suj5IKAvAfxpIwYoKFhMYAAAAASUVORK5CYII=\"","module.exports = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIYAAAAZCAYAAAD0SVYHAAAACXBIWXMAAAsSAAALEgHS3X78AAAEoklEQVRogd1b7VEbMRBdMv4PHZhUYKcCoAKcCnxUwFIBpgJvKoipIHYFOVfA0YFdQXAFZNZ5miziPnR31nHmzdzYxidZJz09vV2Jk9fXVzoGiMiEiBZEdFqjuVsiYmZeHsVD9gjHRIwNEQ2JaEVEWUARJdII72+YeRG5iZ8KlcQQkTMiGpfc8sLMIQPVCiKiDX1m5rK2+G2/JKIlVObDyOH14SVe9bP+/Rx9GPxcXaCUGJDvXwHtqDVgTQBirJn5sk5xEdF2PeHj91jLiojoACf4aAd9GFKemU9itKspvlSUC51hIxHhj3mEckDNbnDTArM3BvR37nFdE9FFKCn6iEJiQC3qGL1eEoP+kUMJfofnSQKKNEGdvuo9BvRfBmdENG3R4CHk3kEjAtFZyswvH90RzCwiMgOB5aPb03cM0L40guxpfXM1VjWWpDeA7C8hy4oLj3xNcOr8ikYufSBtHRzg+YMwwJIRcy3kpsSAil1AfTYHbNM56pWIS4vDGq8ZJskG1z6aE5HUED8IsY2qkm9QEYpabDF73Qwbw2RVYRRwTxFc28aHnNlQoj8gyCHxjInQSQgfE4PAuh+Yeeb/EaHgouXgV0JJgcHMjLr9UEXBd0tDUh2cxA2MiCyMd9qH1SgTo6lKiDRGxXkQkReY3itM2CdMYFXB30S0Y+Z9FIaoce5CfqdUReoTQow7GLcxpN2Fe6mSBUmkrIPQbIzf2KINt+iMGUixg0QrSVM11FCZKb7LAjOmxwQd7J/ecmgnsPqpBFFZrSWzKo+xNqRITXyu173ORnR+7HXaYmFCY5vsypBke8gJSzfosHeqd8zAgG9B/gkU0fdzE0SdtVQ9NMElBXH6VM0r5HPbUR8nJtzMk22nCjaRNYK0fsbNNEf20wLiXzeZuFXEcJFAmWsee/fGxhCd8OjnI+BD8szDFkrS2yRcC0xMUX+7YIXXe/M+CKHms0/INcKIMBbG61hJ3RSUOWrA311j0HWC3spbV52hX0ZQy5Aoco8qYjhvsSqpNDX3xoQLV/PC1i0IMYTR1DMYTsGeC8p0DrPRdgmFTb0lry4c2QV13uO9JYcgStN9op9+/TZhZiOUKmK49PEMP+z7jEf1F+p8Y+8VIBn0rSA/MDbEzLycR63d2DpQUx6arzAG3vXTRZstCCybKaJDHQPbjg2WzhT+z6nng1nyFwUebY+T+Xw+A9OKoIOfoCEzDIB2/BIs9B/4HZpm6kx+4rFF9jQPCQZlxcyTOgWNj3GDujMRW+GxAHPQKBehfaQzvKvMZxWmWLZUntmrwB6EidJGdPi05QZfWf11kXqh32ng2n2wPE8X+yWh5nOKeDiFoTmDRMfOeKpEfoXznsNLtFGOBAN0B8WrFUlBHZs+865kAu1CK+nqQM8AM6BsKXFwMyPY2QLroLsKgMFTsz1vG11A4YaatGtYRRuj6LKURd/1Cl86SE4d0hu0PX3VtnxWMbsLzRwyklfwS2tc+v6qjweV92c+TRiVHHAtXOGQzkGyjQ1Oiftwu8FbZm68q4rlZJnTT3uT3rTevuGz/1+Jjx1i+tZkxbKkl4vQusr8xgcR/QUEy+1BBLOq/AAAAABJRU5ErkJggg==\"","module.exports = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADMAAAAcCAYAAADMW4fJAAAACXBIWXMAAAsSAAALEgHS3X78AAACBklEQVRYhe2YPVIbQRBGn1S+ACcwRhcwBQcgkHIndgokS9oT4ZBQRNOpSSynkJCbgAOIMhdAoBPoCOtq00tNCSRWooR3KL6qDbTzs9+b7ulSdassSyqFENYBAb4AH2muxsAlcBRjvKtcPsCEEPaAn8AvYBBjvGwqSghhBzC/u8B+jHFABeMgCuzEGK//v916CiF89giJAbVExFLrFtjMCaSSA/0BPrUt7yy1cgQxuW+7GmIwln+DBvh6iQb/ipaIlHZvcn+Mo51vMB7rTcF8WGaRqhbAjzlTRiLSUdUNn9dNx4ATETn2vW6Ajan136vxRbQUjIicmKEErpw2oKprwNDNd0Rk5O/7wFcgNWtwBz5+CPRVdeLfqa1VptkWsOZGR8lBGPT2rEXJgWwt+sFVwlwBE6DwaNSSRxSP6EJaKs3qSEQmqtoDLG0OPX0qSIvOxYxtTv0QzhoDwz2QGf9W/fbCYc9vVe0k6Vf4GA7SS1Ozrl61NE8VjrSC2b1qAQd+z4oZW8xVbRhLE6taqtqtMd3md1V1mKQXXqoLL92P0sxhDcgiNa/0P6lVRmbk96Pvh2Dl+8bf92YtmgIaJgXheb3/N2uo3mGaKoMZe4MgW7n/scGce6cjZ5n/87Z3ZXa9MZCd3Le1nLTtTbR9a9nkBpS0mqx3dvf2moDJpJzas3bX9aE9C/wF86IVMIvT+jYAAAAASUVORK5CYII=\""],"sourceRoot":""}