{"version":3,"sources":["components/images/BigBen.png","components/images/Email-white-26.png","components/images/Twitter-white-26.png","components/images/Facebook-white-26.png","components/images/Mastadon-white-26.png","components/images/csv-icon.png","components/NavMenu.js","components/Jumbo.js","components/About.js","components/Footer.js","components/Layout.js","components/Search.js","components/RegisterEntryList.js","components/WordCloud.js","components/RegisterEntryDetail.js","components/PostcodeLookup.js","components/RegisterEntry.js","components/NewEntries.js","components/Api.js","components/Download.js","App.js","registerServiceWorker.js","index.js"],"names":["module","exports","NavMenu","props","toggleNavbar","bind","state","collapsed","this","setState","className","dark","class","rel","tag","Link","title","href","src","logo","alt","onClick","isOpen","navbar","to","Component","displayName","name","Jumbo","About","Fragment","action","method","target","type","value","border","width","height","email","twitter","facebook","mastadon","Footer","Date","getFullYear","getYear","Layout","children","Search","input","hits","current","message","changeValue","onChange","handleClick","keyPressed","onKeyPress","handleCurrentClick","onCurrentClick","e","key","search","checked","api","fetch","then","response","ok","json","Error","status","data","total","elapsedMilliseconds","catch","error","console","log","placeholder","addonType","color","id","htmlFor","map","hit","url","linkTitle","party","constituency","moment","indexedOn","format","highlights","highlight","dangerouslySetInnerHTML","__html","text","RegisterEntryList","toggle","hasData","entries","Count","dropDownValue","dropdownOpen","prevProps","prevState","currentTarget","textContent","getAttribute","entry","find","entryId","onChangeEntry","caret","style","overflowY","maxHeight","member","fullName","resizeStyle","display","alignItems","justifyContent","background","WordCloud","words","isLoaded","getWordCount","res","result","wordCounts","defaultSize","options","enableTooltip","fontSizes","maxWords","RegisterEntryDetail","description","link","entryUrl","PostcodeLookup","replace","RegisterEntry","handleEntry","handlePostcode","memberId","house","entryDetail","NewEntries","length","registerDate","registeredInterest","interest","Api","Download","files","file","filename","App","Route","exact","path","component","isLocalhost","Boolean","window","location","hostname","match","registerValidSW","swUrl","navigator","serviceWorker","register","registration","onupdatefound","installingWorker","installing","onstatechange","controller","baseUrl","document","getElementsByTagName","rootElement","getElementById","ReactDOM","render","BrowserRouter","basename","URL","process","origin","addEventListener","headers","get","indexOf","ready","unregister","reload","checkValidServiceWorker","registerServiceWorker"],"mappings":"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","file":"static/js/main.77bc4216.chunk.js","sourcesContent":["module.exports = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABoAAAAaCAYAAACpSkzOAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAFOSURBVEhLzZWxTsNADIZTJgYGhrKgDiCVN2DsQ3ToUAbehTdg5AEYWGCBx2FgAAkkBgb2hM++n5MgSnNHLsAnWfbZZ/vi5Noql6ZpliZajgMNDuq6fkPekbncZaHwPnJDMwf7FjlUuBwUPVePCL4LhXuZSPdihWV+YQIyN7IlPTr/qxFTO5PZYlMsCytk76eHYc2sQKiTRJknGw3uyJVOmozlKL1F5x2wRJlZdN2r5M+bvk/ICeYe+gg5NV+IDoAiEUbyiJoqZGO9RNb4dtEPvkloSzrKc6yo3ObfZv2K9sZqGPFNOSjvk/g02EuK32lpjWZhS0DuFtk/QdR6QR2jF8EzED+e4NQruR1cC3zPyBwpNzqK2QvfUcixJuZD3/smoXA6yotYM2SFOUXPkPX3JobSW/z9haXPtcxkfpJTnM7RGbnj6xqb8Ut/5VX1AZpDBXsm73mtAAAAAElFTkSuQmCC\"","module.exports = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABoAAAAaCAYAAACpSkzOAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAMpSURBVEhLlZY/aFNRFMaTkKFDQIcOBTtkqNDBwaGDQkDRgg4dHCM4ODh0cHBw7CA4ODg4dNBFMog4KHSogiDiEKRDhQ4KVQykUKEVhQotWFASf9+5J9f7XhITP/hyz3fOuf/eO/e+FAsj0O12p+AC5gU4AyeLxeI0vh/Y4hZ8DV+WSqV3tP+HTqdzDj6Aeww6EuT9gg143ocYDfrdUscwRD+IbcOfLjNQP7iMedSH6wfBCZIeWY8E+DbhDTjtqQb0DFyAS3Df0w3oHZjJjyDQ8DyDd74Ky54yFORUyX+jfj2gN2myO8N5PYQD0FrRCQ+PDfrkF3tXfqs6tCqrTTVNuP5NczqtInzamSpvDm6R+xj9AdsGEvBdpjnEv4k9JZ/Gwj4uW6u4hyNC2gIAWUGvhMhf4LMqc9mDPSb8ddcG9M3eQLGCsLdpKjYLQDdDJEC5sK/k5fcuBmkPKfZq0OxXPFeLuBS8AcSe0lSgqvO2OR3otnczoDc8FGL8ZMoZrdOvScq55MxOsTVZuuo1DxnQTzyk2H4J32wIWecDCqDldpWXeNICAc/QB27rxR/SpFdOjAnEP7lp0ESTwTR89FaJVTcN6BdupkjP1xdvDSz0mJtCq5QbUOVqINEeYQ9oXZ55pCdfO0wRHzNolRjguwshnmIWMPyuAjz3GXLiRNhf3dSitNP5oAwtPbp0oriL/A4YqOZmD3VvDeQfcVP2PPn2SrB1+B9qZasIA7ZubHvu2KeCNwC9Ir+AnEXnL9Gmx3QudccZsJetE0b+jov3G/a6uw3oJlyFOrRt2R4yoNfhN5fSOzR2FdmzDu4AdbYAQNbQA7874CzMHOgU9NMZzFSuJtOJj0DH2wF7Dr73kGJrcNHDiutbZIuh1f23Ae8g06oLIKAPWPyiYmv7mdWgdfWkZy4Cf1n5ynHXcDD4NRIj0HoPS5j26RgHY+cycOaiFPB9houYNZjZEVo7UQXqM69CaXhoNEiuw0zppiC2B1Vxsbp6wDf+RAJ99P3XX6eh/4QGgfz7PkQf/vkHkr56wRcxz0B9wsucePl0r+1C3di7+N7iez78D2Sh8Af+vAIUFJc3pAAAAABJRU5ErkJggg==\"","module.exports = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABoAAAAaCAYAAACpSkzOAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAHFSURBVEhL7ZY9SwNBEIbvxCJFipQpLARTBLRIIWghmMJCJP/CNkVK/4CdYJEfIGJhKfiBEUsFC4UIKSxtBBsLQSGCeuczu+OFSy65NV6nD7zM3c47s3eb7CbeP+PiaxyLIAjmCOto3gx43o3v+7voVu/Fsxjdh2GYZ6BhbhzBX0ddamMw9k7Y0HwHHWiJKaqpyWkyrFXxp0G/O8I0qphCBrZNBrhuEvImMQRtkAq+K3TPZfm7sGFTFk1WTbIPxgvG5AB9Hgl2EoGbisn0gfEa1bksqFW8SybpALU1LevB4IXmByDXRW20j2RpXYmvCsWrDK4QOzafGdGyTWhcRueot57Z8KTRTsSGOtE4KTELeBvZvAMTXZI4NiPZ0dIYh4nkdDiShc0Iu0mTYKISkqNDvv9jQ/2ptkwGQ2zj/oLEzR6BIcdkQ/eTC9Q3td1o8MpntYPkFP4R1LQJOW3lBkVT8nS2RTp45aAtarkbFK2hPfRp24wG3yFa0PJEfHxyGsvhN4vkZCizr5xOCOo+CFv4N9GrHR0BTyNf6yYa+MVMAt8LkjcuaYtUYv8Z6FFE8nYzSJqI5CfiGT2IePIzYov4RvyzeN4Xa004Z6XCriEAAAAASUVORK5CYII=\"","module.exports = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABoAAAAaCAYAAACpSkzOAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAEpSURBVEhL7ZZBDsFAFIY7Y2NJQriGI0gsRSKxsBNHcA5HsLRwAAkLG+ECjuAAktqxkPK/mVcxVUVnZiO+5PW1b8b/97WPCGKiKGojVojwaglpsFaP5TUojHmPc6A9iU0GiBPXnQPtC2Io4dUVQhSVqwegXUDqCLiFuCjpsh/Q2EHamEBgjdREVKFzRy0+gFKFNucCT2LJOk/wFgNBB17/lgbudMfnBmmaNAx52XNWoMMZQk0vlwxyd5R8F2SC0svptekoyZlzKl8b4QGMkt0QUsoy1bHe4pKBy45i6pwNfBjVOBu4HIbMXxgfHaXyN8rNDxphuo98bkXWaJMHdbTVl3a8ueENGc2xKdLXn4PPGGR1BBbqiG/1hPc7B9pTZRKDgo8/kH2tHgQ3Inl7pnq2ANIAAAAASUVORK5CYII=\"","module.exports = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABoAAAAaCAYAAACpSkzOAAAABmJLR0QA/wD/AP+gvaeTAAAEC0lEQVRIia2VTWxUVRTHf+e+eWXaKUWGEmIR20KppbU00ibEBbB140di2uiSGDVRQwgf0WgkhHSjEGLYEKMs1OiCDUQhhgUqERYWGrSlFlICLV+xlmbaDk5n3rx3j4t2xjevBUrwv7rvnPPO75z7zr1PmEdrus+sMr7scESft0FQr2qrsLYMENSKm1wJcA/ICIwqckvQS6pcyAa5U9c+6JiM5pTwQ+Pen6tF5ZzNZxvnK6CgWdD9lBXh23g6t613b0emYDSFxbOf9a/A6tWHQRaguCpvTFcu+nH9/j8Sc0Beavwn9b0ljwkJa3Mg5tPCgwCs7T63mUz6TDSyzI15bTWJO8sTTn5wLFc5fDfzpKriJlciMK3K1yrSJ6LLUbqA5kgKX3EaBnc1j8QAHN//KIhE1FYn/jr8Us1yx0hdwfbn6PSNHSdurwImrNrNg7vbLhVfOHq0e93NpsOi8mYoTcyo/xrwiQGwNtgQhjjGCQ69WFPlGHHC9uYV5U93tSWviuiOEghAV1dQkfa2I9wIm1XMFoAYM6TFYWd9dflo3JEagOMDk0Of94ytSZS5mSOvPuVvbU82dHfWf9Xq9S21MTmmQpOIeWtgZ8v3vXs7MusO9P0gyLsh1CqYHQZV64ZBq5NucSy/PD9eZwNr0tO5yoNn706IIIioXybvqLAFWKGq+wvxRswgpVpWBImUehKuo4W17wfFIkZS3n+dq7aEqq4trqzNEJKADXXE/RUqIq9qQmZ3/qhSKZIvgkBKUNEOH0ViiJSt90KgUt9jcEBNJJmkYHbqREQfuH2zGk97T7z8zfVsy4H+Cwqr54uxgob3R1XHoPCNMH442BjmlaqVbC4fV2gHlj68NBDlGhQ7IqcQLzhHUnn34p3s9ZkiqF9IvqYDfe0zldtaDW2+ilwpghCTBooXas/IZF3PyJxfyoPkGuQCzJngu+o5x2YKAMQ4w4+SdYEategLlz9cNx4C8fv/CLCIfKc4Gy/vWt9bMMYA1PIFyHtzxlyMttQkbt1MeVVT2XylqnWipwTwgdsK/QK/OOjJ/p2tl6NBxa/W+PHpKQ3yJZeriHBia4MXM1IGYFVtKhtMvH76XlM878bzvjtx5f2m9ELajBUW6rhHCPLbw05V5djA1HBn65JGACNilpXHkle3bRhbSPKwiidmiE07xXGnogFHesbWHh+YHLKKH/UBNBwaWtRycCD5MFDJbbN2368bxcueVRvE5gSK0cq4+095mXgpp/o0qMvMGXtGlT2Du1v3R9+ZtyOAoT2bfjMVVS0mFr8evfBUraSnc5V/T2aToJ3AK0AbEBdDxSN1FFbzvvPP+XZ6m2DbNQjqVIMEVgVU3OTKUdBhkIuKnqpY7J3sfbsj/yDQv+3vqMhk76DFAAAAAElFTkSuQmCC\"","module.exports = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAExUlEQVR42rWXa0wcVRTH//NYdpdXC2VrClTsIyWVStFi+YCmxi9KwcQam2gQrCZGm2hMbRrxg4nfJMFvasQPJihVQhQlaazVD9i0aSql66OAVUR5bHnEgizssrvsvDx3mN3uLjuzs43e5OTM3rl7z++ce++5ZzjYbA9dmSom9RjJwyQ1JBUkm4zXyyRTJD+TDJCcOX+w4h8783I2DFeRaiM5SuK0ybtG8jlJO4GM3hYAGc4n9TbJcRLBbqRSmkLyAckbBBK0DUDG95L6iqTyNg2ntt9JjhDE9YwAZLyO1DckRf+R8VhbImkgiEFTAMPzS/+D8USI+sRIxAGMNb+KNGHnSR4pdmOX22G5a+dWQ7iyGMC04LaCYMtRG9sTiQDvkno53T9eLC3AE568jO6NLPrx099LcBaX4KP5Vauh7xHAK3EA46j9ApPd3nO3B8UOAb1j0+RlGIfvKsWAb57+zGGz04HHd5ej/88b2F9ShIszN/HCPbvQNbuCnpshMwB2OvazIxoDOE2q2Wx0376tkGUZndfG8eq9ezCxvIq+cR9yBB47C/N1qO0FuWjaUYYTF35Ex4M1cAkCOmdW0L8YNpv2NAG0cEaGm4VFkmEAbp7DW5eHdY/vLMjDmD+AYFTGS9W7cXxgCD0N9dhE74YX/PhweBzVJZt1iH5/FMHcQnDcht3DklUpA3iWHrqsFowB5Au8/iyrKkSeh6pp+m9+48SQFBV/LQchaSq6Rifww1IIrm1lEJyu1KHHGMDH9NCaCSAqSTBs2m55DhHveK/j7OQc2HbL2eJBTomHosHHhnzCANjmq84E0PTl94iS99m0Uwf2YpROxjrAeuNznOvRcOeRQ9o1BuDHrVvNEgBuERyf8f5aX4aQhJM1lRsAYs1RtAVOzx3LDCBjYGMAXJ4j3WZKDxCW8Fr1HlMA1jiR5ssKINfBwqZDpNN6VjFmU6JKRgAdIpsl0JyC7pnD5YAUuaVFpwiZjqQgCtDUdQK2VDYAAlltQuSK0GTyWOSStcDphvVIGCFQJdUOwLDtY2gVgULSqgEQiErgKU/YjEC37UQUOwWqrIIX+bhmQEPNh+Nj7//0rL4k7L0NgOdsp+J4BCIpESCAqy2N8bG13V/rYCwaGQBYKi6LXUbdpJ7JCOAS9LUV6GZUJEXXDCQ1AqxfpaR1srrSCuAzb2tTs63ruLfKg6fOXERAkpMSkUDPPO25S08/Gu+r7zkHlYZIBPhmXRUG5xfx3dR86pR0HXM13tbGEVsFyYnyQrjCAZwjTxKTBjtx7Yfuo60hxvsisoK2C15sdTvxfNVOHPt2EAuRtdQp3yfvdVu2SjIHjXqSKqLt6ho0RY73jy1R+RUMoeNQrR4NdkOeOu9Feb5Lv7L7/vDp13ZKGyOzB8j75JLMgLAsStVoFCHfBDQpmtR/tLICrx/ch46hUfT+NgmLxorSB8j7X2MdWZflKl3LYYJQo8lhrdtWgsG5hUzGG8i4eVmeEgnTDxONyrPQjUmoEdNyK03YcSTRc0sAA8Ly00xTFIQJQgmbFp6sseKzk8y0xdbcNkACiOnHqUZnPTwzDWV1w0Zj6/MFZaN2b0vjiNX89i53mH+es2s4MutbkQPLSZ/nFO5FO/P+CxeiakBe09VgAAAAAElFTkSuQmCC\"","import React, { Component } from 'react';\nimport { Collapse, Container, Navbar, NavbarToggler, NavItem, NavLink } from 'reactstrap';\nimport { Link } from 'react-router-dom';\nimport './NavMenu.css';\nimport logo from './images/BigBen.png'\n\nexport class NavMenu extends Component {\n  static displayName = NavMenu.name;\n\n  constructor (props) {\n    super(props);\n\n    this.toggleNavbar = this.toggleNavbar.bind(this);\n    this.state = {\n      collapsed: true\n    };\n  }\n\n  toggleNavbar () {\n    this.setState({\n      collapsed: !this.state.collapsed\n    });\n  }\n\n  render () {\n    return (\n      <header>\n        <Navbar className=\"navbar-expand-sm navbar-toggleable-sm ng-white border-bottom box-shadow mb-3\" dark>\n          <Container>\n            <a class=\"navbar-brand\" rel=\"home\" tag={Link} title=\"Members Interests\" href=\"#ß\">\n                <img class=\"logo\" src={logo} alt=\"Big Ben\"/>\n            </a>\n            <NavbarToggler onClick={this.toggleNavbar} className=\"mr-2\" />\n            <Collapse className=\"d-sm-inline-flex flex-sm-row-reverse\" isOpen={!this.state.collapsed} navbar>\n              <ul className=\"navbar-nav flex-grow\">\n                <NavItem>\n                  <NavLink tag={Link} className=\"text-light\" to=\"/\">Search</NavLink>\n                </NavItem>\n                <NavItem>\n                    <NavLink tag={Link} className=\"text-light\" to=\"/commons/registers/latest\">Current Register</NavLink>\n                </NavItem>\n                <NavItem>\n                  <NavLink tag={Link} className=\"text-light\" to=\"/commons/entries/new\">New Entries</NavLink>\n                </NavItem>\n                <NavItem>\n                    <NavLink tag={Link} className=\"text-light\" to=\"/commons/downloads\">Downloads</NavLink>\n                </NavItem>\n                <NavItem>\n                    <NavLink tag={Link} className=\"text-light\" to=\"/api\">API</NavLink>\n                </NavItem>\n              </ul>\n            </Collapse>\n          </Container>\n        </Navbar>\n      </header>\n    );\n  }\n}\n","import React, { Component } from 'react';\nimport { Jumbotron } from 'reactstrap';\nimport './Jumbo.css';\n\nexport class Jumbo extends Component {\n    render() {\n        return (\n            <Jumbotron>\n                <h1>Members Interests</h1>\n                <br />\n                <p>\n                    We've indexed the Register of Members Financial Interests so you don't have to.\n                </p>\n            </Jumbotron>\n        );\n    }\n}","import React, { Component } from 'react';\nimport email from './images/Email-white-26.png';\nimport twitter from './images/Twitter-white-26.png';\nimport facebook from './images/Facebook-white-26.png';\nimport mastadon from './images/Mastadon-white-26.png';\n\nexport class About extends Component {\n    static displayName = About.name;\n\n    render() {\n        return (\n            <React.Fragment>\n                <div class=\"small-spacer\" />\n                <hr />\n                <div class=\"row\">\n                    <div class=\"col-md-5 offset-md-1\">\n                        <h4>About Us</h4>\n                        <p>\n                            There are two of us: A husband and wife team who work as a Solution Architect and Project Manager respectively.\n                            We are independent of any political party and are not funded by anyone other than ourselves.\n                        </p>\n                        <p>\n                            If you would like to contribute towards the cost of running the site you can do so via PayPal.  Many Thanks!\n                        </p>\n                        <div class=\"center-block\">\n                            <form action=\"https://www.paypal.com/cgi-bin/webscr\" method=\"post\" target=\"_top\">\n                                <input type=\"hidden\" name=\"cmd\" value=\"_s-xclick\"/>\n                                <input type=\"hidden\" name=\"hosted_button_id\" value=\"YHWX3ZGX2T7CW\"/>\n                                <input type=\"image\" src=\"https://www.paypalobjects.com/en_GB/i/btn/btn_donate_SM.gif\" border=\"0\" name=\"submit\" alt=\"PayPal – The safer, easier way to pay online.\"/>\n                                <img alt=\"\" border=\"0\" src=\"https://www.paypalobjects.com/en_GB/i/scr/pixel.gif\" width=\"1\" height=\"1\"/>\n                            </form>\n                        </div>\n                    </div>\n                    <div class=\"col-md-5\">\n                        <h4>Contact</h4>\n                        <p>\n                            <address>\n                                <img src={email} alt=\"Email\" />\n                                <a href=\"mailto:hello@membersinterests.org.uk\" class=\"btn btn-link\">hello@membersinterests.org.uk</a>\n                            </address>\n                            <address>\n                                <img src={twitter} alt=\"Twitter\" />\n                                <a href=\"https://twitter.com/MPInterests\" class=\"btn btn-link\" target=\"_blank\" rel=\"noopener noreferrer\">@MPInterests</a>\n                            </address>\n                            <address>\n                                <img src={facebook} alt=\"Facebook\" />\n                                <a href=\"https://www.facebook.com/mpinterests\" class=\"btn btn-link\" target=\"_blank\" rel=\"noopener noreferrer\">MPInterests</a>\n                            </address>\n                            <address>\n                                <img src={mastadon} alt=\"Mastadon\" />\n                                <a rel=\"me\" href=\"https://newsie.social/@mpinterests\" class=\"btn btn-link\" target=\"_blank\">Mastodon</a>\n                            </address>\n                        </p>\n                        <p>\n                            <i>Don't forget to tell everyone what you discover using <b>#mpinterests</b> and <b>#transparency</b> as  tags!</i>\n                        </p>\n                    </div>\n                </div>\n            </React.Fragment>\n        );\n    }\n}","import React, { Component } from 'react';\n\nexport class Footer extends Component {\n    static displayName = Footer.name;\n\n    getYear() {\n        return new Date().getFullYear();\n    }\n\n    render() {\n        return (\n            <footer>\n                <div class=\"small-spacer\" />\n                <div class=\"row\">\n                    <div class=\"col-md-10 offset-md-1 text-center\">\n                        Contains Parliamentary information licensed under the\n                        <a href=\"https://www.parliament.uk/site-information/copyright/open-parliament-licence/\" class=\"btn btn-link\" target=\"_blank\" rel=\"noopener noreferrer\">\n                            <strong>Open Parliament Licence v3.0</strong>\n                        </a>\n                    </div>\n                </div>\n                <div class=\"row\">\n                    <div class=\"col-md-10 offset-md-1 text-center\">\n                        Icons from<a href=\"https://icons8.com/\" class=\"btn btn-link\" target=\"_blank\" rel=\"noopener noreferrer\">http://icons8.com</a>\n                    </div>\n                </div>\n                <div class=\"row\">\n                    <div class=\"col-md-10 offset-md-1 footer-text\">\n                        <p>\n                            <small>\n                                The information contained in this website is for general information purposes only. The information is provided by ourselves and while we endeavour to keep the information up to date and correct, we make no representations or warranties of any kind, express or implied, about the completeness, accuracy, reliability, suitability or availability with respect to the website or the information, products, services, or related graphics contained on the website for any purpose. Any reliance you place on such information is therefore strictly at your own risk.\n                                In no event will we be liable for any loss or damage including without limitation, indirect or consequential loss or damage, or any loss or damage whatsoever arising from loss of data or profits arising out of, or in connection with, the use of this website.\n                                Through this website you are able to link to other websites which are not under the control of ourselves. We have no control over the nature, content and availability of those sites. The inclusion of any links does not necessarily imply a recommendation or endorse the views expressed within them.\n                                Every effort is made to keep the website up and running smoothly. However, we takes no responsibility for, and will not be liable for, the website being temporarily unavailable due to technical issues beyond our control.\n                            </small>\n                        </p>\n                    </div>\n                </div>\n                <div class=\"text-right\"><span>&copy; {this.getYear()} - MembersInterests.org.uk</span></div>\n            </footer>\n        );\n    }\n}","import React, { Component } from 'react';\nimport { Container } from 'reactstrap';\nimport { NavMenu } from './NavMenu';\nimport { Jumbo } from './Jumbo.js';\nimport { About } from './About.js';\nimport { Footer } from './Footer.js';\n\nexport class Layout extends Component {\n  static displayName = Layout.name;\n\n  render () {\n    return (\n      <div>\n        <NavMenu />\n        <Jumbo />\n        <Container>\n          {this.props.children}\n        </Container>\n        <About />\n        <Footer />\n      </div>\n    );\n  }\n}\n","import React, { Component } from 'react';\nimport {\n    InputGroup,\n    InputGroupAddon,\n    Input,\n    Button,\n} from 'reactstrap';\nimport moment from 'moment';\n\nexport class Search extends Component {\n    static displayName = Search.name;\n\n    constructor(props) {\n        super(props);\n\n        this.state = {\n            input: '',\n            hits: [],\n            current: false,\n            message: null\n        }\n\n        this.changeValue = this.onChange.bind(this);\n        this.handleClick = this.onClick.bind(this);\n        this.keyPressed = this.onKeyPress.bind(this);\n        this.handleCurrentClick = this.onCurrentClick.bind(this);\n    }\n\n    onChange(e) {\n        this.setState({ input: e.target.value });\n    }\n\n    onKeyPress(e) {\n        if (e.key === \"Enter\") {\n            this.search()\n        }\n    }\n\n    onClick(e) {\n        this.search()\n    }\n\n    onCurrentClick(e) {\n        this.setState({ current: e.target.checked });\n    }\n\n    search() {\n        let api = this.state.current ? `api/v1/search/current/${this.state.input}` : `api/v1/search/${this.state.input}`;\n\n        fetch(api)\n            .then((response) => {\n                if (!response.ok) throw new Error(response.status);\n                else return response.json();\n            })\n            .then((data) => {\n                this.setState({\n                    hits: data.hits,\n                    message: <div class=\"font-italic\">Found {data.total} results in {data.elapsedMilliseconds}ms</div>\n                });\n            })\n            .catch((error) => {\n                console.log(error);\n                this.setState({\n                    hits: [],\n                    message: <div class=\"font-italic\">No results!</div>\n                });\n            });\n    }\n\n    render() {\n        return (\n        <React.Fragment>\n            <div class=\"row\">\n                <div class=\"col-md-10 offset-md-1\">\n                    <h4>Search Registered Interests</h4>\n                </div>\n            </div>\n            <div class=\"row\">\n                <div class=\"col-md-10 offset-md-1\">\n                    <InputGroup>\n                        <Input onChange={this.changeValue} onKeyPress={this.keyPressed} placeholder=\"Enter search term(s)\" />\n                        <InputGroupAddon addonType=\"append\"><Button color=\"secondary\" onClick={this.handleClick}>Search</Button></InputGroupAddon>\n                    </InputGroup>\n                </div>\n                <div class=\"col-md-10 offset-md-1\">\n                    <div class=\"form-check auto-width\">\n                            <input type=\"checkbox\" class=\"form-check-input\" id=\"current\" onClick={this.handleCurrentClick}/>\n                        <label class=\"form-check-label\" htmlFor=\"current\">Restrict to current session</label>\n                    </div>\n                </div>\n            </div>\n\n            <div class=\"row\">\n                <div class=\"col-md-10 offset-md-1\">\n                    {this.state.message}\n                </div>\n            </div>\n\n            {this.state.hits.map(hit => {\n                return (\n                    <div class=\"row\">\n                        <div class=\"col-md-10 offset-md-1\">\n                            <a href={hit.url} target=\"_blank\" class=\"btn btn-link\" rel=\"noopener noreferrer\">{hit.linkTitle} ({hit.party}), {hit.constituency}</a>\n                        </div>\n                        <div class=\"col-md-8 offset-md-2 small font-italic\">\n                            <div>Registered {moment(hit.indexedOn).format(\"LL\")}</div>\n                        </div>\n                        {hit.highlights.map(highlight => {\n                            return (\n                                <div class=\"col-md-8 offset-md-2\" dangerouslySetInnerHTML={{ __html: highlight.text }}/>\n                            )\n                        })}\n                    </div>\n                )\n            })}\n\n            <div class=\"small-spacer\"/>\n            <div class=\"row\">\n                <div class=\"col-md-10 offset-md-1\">\n                    <h5>The Register</h5>\n                    <p>\n                        The Register of Members' Financial Interests (RMFI) is published soon after the beginning of a new Parliament,\n                        under the authority of the Committee on Standards and Privileges, and annually thereafter.\n                        Between publications the Register is regularly updated electronically.\n                    </p>\n                    <p>\n                        We update our index after each new publication.\n                    </p>\n                </div>\n            </div>\n            </React.Fragment>\n        );\n    }\n}","import React, { Component } from 'react';\nimport { Dropdown, DropdownToggle, DropdownMenu, DropdownItem } from 'reactstrap';\n//import spinner from './images/SpinningArrow.gif';\n\nexport class RegisterEntryList extends Component {\n    static displayName = RegisterEntryList.name;\n\n    constructor(props) {\n        super(props);\n\n        this.toggle = this.toggle.bind(this);\n        this.changeValue = this.onChange.bind(this);\n        this.state = {\n            hasData: this.props.entries.Count === 0 ? false: true,\n            entries: this.props.entries,\n            error: null,\n            dropDownValue: 'Select Entry',\n            dropdownOpen: false\n        };\n    }\n\n    componentDidUpdate(prevProps, prevState) {\n        if (prevProps.entries !== this.props.entries) {\n            this.setState({\n                entries: this.props.entries\n            });\n        }\n\n        if (prevProps.dropDownValue !== this.props.dropDownValue) {\n            this.setState({\n                dropDownValue: this.props.dropDownValue\n            });\n        }\n    }\n\n    toggle() {\n        this.setState({\n            dropdownOpen: !this.state.dropdownOpen\n        });\n    }\n\n    onChange(e) {\n        this.setState({ dropDownValue: e.currentTarget.textContent });\n        let id = e.currentTarget.getAttribute(\"id\");\n        let entry = this.state.entries.find(e => e.entryId === id);\n        \n        this.props.onChangeEntry(entry);\n    }\n\n    render() {\n        const { error, hasData, entries, dropdownOpen } = this.state;\n\n        if (error) {\n            return <div>Error: {error.message}</div>;\n        } else if (!hasData) {\n            return <div>No data</div>;\n        } else {\n            return (\n                <Dropdown isOpen={dropdownOpen} toggle={this.toggle}>\n                    <DropdownToggle caret>\n                        {this.state.dropDownValue}\n                    </DropdownToggle>\n                    <DropdownMenu style={{ overflowY: 'scroll', maxHeight: 300 }}>\n                        {entries.map(entry => {\n                            return <DropdownItem id={entry.entryId} key={entry.entryId} onClick={this.changeValue}>{entry.member.fullName}</DropdownItem>\n                        })}\n                    </DropdownMenu>\n                </Dropdown>\n            );\n        }\n    }\n}","import React, { Component } from 'react';\nimport ReactWordcloud from 'react-wordcloud';\nimport { Resizable } from 're-resizable';\n\nconst resizeStyle = {\n    display: 'flex',\n    alignItems: 'center',\n    justifyContent: 'center',\n    border: 'solid 1px #444',\n    background: '#444',\n};\n\n// https://react-wordcloud.netlify.com\n\nexport class WordCloud extends Component {\n    static displayName = WordCloud.name;\n\n    state = {\n        words: [],\n        isLoaded: true,\n        error: ''\n    }\n\n    constructor(props) {\n        super(props);\n\n        this.getWordCount(this.props.id);\n    }\n\n    componentDidUpdate(prevProps, prevState) {\n        if (prevProps.id !== this.props.id) {\n            this.setState({\n                id: this.props.id\n            });\n\n            this.getWordCount(this.props.id);\n        }\n    }\n\n    getWordCount(id) {\n        fetch(`api/v1/commons/registers/wordcloud/${id}`)\n            .then(res => res.json())\n            .then(\n                (result) => {\n                    this.setState({\n                        isLoaded: true,\n                        words: result.wordCounts\n                    });\n                },\n                (error) => {\n                    this.setState({\n                        isLoaded: true,\n                        error: error\n                    });\n                }\n            )\n    }\n\n    render() {\n        return (\n            <Resizable\n                defaultSize={{\n                    width: \"85%\",\n                    height: 300,\n                }}\n                style={resizeStyle}>\n                <div style={{ width: '100%', height: '100%' }}>\n                    <ReactWordcloud options={{ enableTooltip: false, fontSizes: [24, 48] }} words={this.state.words} maxWords={40} />\n                </div>\n            </Resizable>\n        );\n    }\n}\n","import React, {Component} from 'react';\r\nimport { WordCloud } from './WordCloud';\r\n\r\nexport class RegisterEntryDetail extends Component {\n    static displayName = RegisterEntryDetail.name;\n\n    constructor(props) {\n        super(props);\n\n        this.state = {\n            entry: this.props.entry\n        };\n    }\n\n    componentDidUpdate(prevProps, prevState) {\n        if (prevProps.entry !== this.props.entry) {\n            this.setState({\n                entry: this.props.entry\n            });\n        }\n    }\n\n    render() {\n        let description = `${this.state.entry.member.fullName} (${this.state.entry.member.party}), ${this.state.entry.member.constituency}`;\n        let link = <a href={this.state.entry.entryUrl}>{description}</a>;\n\n        return (\n            <React.Fragment>\n                <div class=\"row\">\n                    <div class=\"col-md-10 offset-md-1 text-center\">{link}</div>\n                </div>\n                <div class=\"small-spacer\" />\n                <div class=\"row\">\n                    <div class=\"col-md-10 offset-md-2\">\n                        <WordCloud id={this.state.entry.entryId}/>\n                    </div>\n                </div>\n            </React.Fragment>\n        );\n    }\n}","import React, { Component } from 'react';\nimport {\n    InputGroup,\n    InputGroupAddon,\n    Input,\n    Button,\n} from 'reactstrap';\n\nexport class PostcodeLookup extends Component {\n    static displayName = PostcodeLookup.name;\n\n    constructor(props) {\n        super(props);\n\n        this.state = {\n            input: '',\n            entries: this.props.entries,\n            constituency: null,\n            message: null\n        }\n\n        this.changeValue = this.onChange.bind(this);\n        this.handleClick = this.onClick.bind(this);\n        this.keyPressed = this.onKeyPress.bind(this);\n    }\n\n    onChange(e) {\n        this.setState({ input: e.target.value });\n    }\n\n    onKeyPress(e) {\n        if (e.key === \"Enter\") {\n            this.search()\n        }\n    }\n\n    onClick(e) {\n        this.search()\n    }\n\n    search() {\n        let api = `api/v1/search/postcode/${this.state.input}`;\n\n        fetch(api)\n            .then((response) => {\n                if (!response.ok)\n                    throw new Error(response.status);\n                else\n                    return response.text();\n            })\n            .then((data) => {\n                this.setState({\n                    constituency: data.replace(/['\"]+/g, ''),\n                    message: null\n                });\n            })\n            .catch((error) => {\n                console.log(error);\n\n                this.setState({\n                    constituency: '',\n                    message: <div class=\"font-italic\">No results!</div>\n                });\n            });\n    }\n\n    componentDidUpdate(prevProps, prevState) {\n        if (prevProps.entries !== this.props.entries) {\n            this.setState({\n                entries: this.props.entries\n            });\n        }\n\n        if (prevState.constituency !== this.state.constituency) {\n            let entry = this.state.entries.find(e => e.member.constituency === this.state.constituency);\n\n            if (entry) {\n                this.props.onChangeEntry(entry);\n            }\n        }\n    }\n\n    render() {\n        return (\n            <React.Fragment>\n                <InputGroup>\n                    <Input onKeyPress={this.keyPressed} onChange={ this.changeValue } placeholder=\"Enter postcode\" />\n                    <InputGroupAddon addonType=\"append\"><Button color=\"secondary\" onClick={this.handleClick}>Search</Button></InputGroupAddon>\n                </InputGroup>\n                <div>{this.state.message}</div>\n                <p>\n                    Powered by <a href=\"https://mapit.mysociety.org/\" class=\"btn btn-link\" target=\"_blank\" rel=\"noopener noreferrer\">MapIt</a>\n                </p>\n            </React.Fragment>\n        );\n    }\n}","import React, { Component } from 'react';\nimport { RegisterEntryList } from './RegisterEntryList';\nimport { RegisterEntryDetail } from './RegisterEntryDetail';\nimport { PostcodeLookup } from './PostcodeLookup';\n\nexport class RegisterEntry extends Component {\n    static displayName = RegisterEntry.name;\n\n    constructor(props) {\n        super(props);\n\n        this.state = {\n            entries: [],\n            entry: {\n                member: {\n                    memberId: 0,\n                    fullName: '',\n                    constituency: '',\n                    party: '',\n                    house: ''\n                },\n                entryUrl: '#',\n                wordCounts: []\n            },\n            dropDownValue: '',\n            isLoaded: false,\n            error: ''\n        };\n    }\n\n    componentDidMount() {\n        fetch(\"api/v1/commons/registers/entries/latest\")\n            .then(res => res.json())\n            .then(\n                (result) => {\n                    this.setState({\n                        isLoaded: true,\n                        entries: result\n                    });\n                },\n                (error) => {\n                    this.setState({\n                        isLoaded: true,\n                        entries: [],\n                        error\n                    });\n                }\n        )\n    }\n\n    handleEntry = (entry) => {\n        this.setState({ entry: entry });\n    }\n\n    handlePostcode = (entry) => {\n        console.log(entry);\n\n        this.setState({\n            dropDownValue: entry.member.fullName,\n            entry: entry\n        });\n    }\n\n    render() {\n        console.log(this.state.entry.member.memberId);\n        const showEntryDetail = this.state.entry.member.memberId > 0;\n        let entryDetail;\n\n        if (showEntryDetail) {\n            entryDetail = <RegisterEntryDetail entry={this.state.entry} />\n        }\n\n        return (\n            <div>\n                <div class=\"row\">\n                    <div class=\"col-md-5 offset-md-1\">\n                        <h4>Choose an MP from the list</h4>\n                        <RegisterEntryList dropDownValue={this.state.dropDownValue} entries={this.state.entries} onChangeEntry={this.handleEntry}/>\n                    </div>\n                    <div class=\"col-md-5\">\n                        <h4>Search by postcode</h4>\n                        <PostcodeLookup entries={this.state.entries} onChangeEntry={this.handlePostcode}/>\n                    </div>\n                </div>\n                <div class=\"row\">\n                    <div class=\"col-md-10 offset-md-1\">\n                        {entryDetail}\n                    </div>\n                </div>\n            </div>\n        )\n    }\n}","import React, { Component } from 'react';\nimport moment from 'moment';\n\nexport class NewEntries extends Component {\n    static displayName = NewEntries.name;\n\n    constructor(props) {\n        super(props);\n\n        this.state = {\n            entries: [],\n            message: null\n        };\n    }\n\n    componentDidMount() {\n        let api = `api/v1/commons/registers/entries/new`;\n\n        fetch(api)\n            .then((response) => {\n                if (!response.ok) throw new Error(response.status);\n                else return response.json();\n            })\n            .then((data) => {\n                this.setState({\n                    entries: data,\n                    message: data.length === 0 ? <div class=\"font-italic\">No results!</div> : null\n                });\n            })\n            .catch((error) => {\n                console.log(error);\n                this.setState({\n                    entries: [],\n                    message: <div class=\"font-italic\">No results!</div>\n                });\n            });\n    }\n\n    render() {\n        return (\n            <React.Fragment>\n                <div class=\"row\">\n                    <div class=\"col-md-10 offset-md-1\">\n                        <h4>New Entries</h4>\n                        <p><i>{this.state.message}</i></p>\n                    </div>\n                </div>\n\n                {this.state.entries.map(entry => {\n                    let description = `${entry.member.fullName} (${entry.member.party}), ${entry.member.constituency}`;\n                    \n                    return (\n                        <div class=\"row\">\n                            <div class=\"col-md-10 offset-md-1\">\n                                <a href={entry.entryUrl} target=\"_blank\" class=\"btn btn-link\" rel=\"noopener noreferrer\">{description}</a>\n                            </div>\n                            <div class=\"col-md-8 offset-md-2 small font-italic\">\n                                <div>Registered {moment(entry.registerDate).format(\"LL\")}</div>\n                            </div>\n\n                            {entry.registeredInterest.map(interest =>\n                            {\n                                console.log(interest);\n                                return (\n                                    <div class=\"col-md-8 offset-md-2\">\n                                        <p>{interest}</p>\n                                    </div>\n                                 )\n                            })}\n                        </div>\n                     )\n                })}\n            </React.Fragment>\n        );\n    }\n}","import React, { Component } from 'react';\n\nexport class Api extends Component {\n    static displayName = Api.name;\n\n  render () {\n      return (\n          <div>\n              <div class=\"row\">\n                  <div class=\"col-md-7\">\n                      <h4 class=\"text-center\">Developers can access our database using a REST API</h4>\n                      <h5 class=\"small-spacer\"><strong>Usage and Licensing</strong></h5>\n                      <p>Please display the following attribution <strong>Data Service by MembersInterests</strong> linking back to this page.</p>\n                      <p>Access to our API is provided free of charge, but we ask that you be considerate in your usage.</p>\n                      <p class=\"small-spacer\"><em>To contribute to the cost of running this site please use the link provided below.</em></p>\n                  </div>\n                  <div class=\"well light-bg col-md-5\">\n                      <h4 class=\"text-center\">API Calls</h4>\n                      <p>API Definition and json file</p>\n                      <p><code>/swagger</code></p>\n                      <p>Return a list of Registers</p>\n                      <p><code>/api/v1/commons/registers</code></p>\n                      <p>Return a list of Register Entries</p>\n                      <p><code>/api/v1/commons/registers/&#123;registerId&#125;</code></p>\n                      <p>Return a Register Entry</p>\n                      <p><code>/api/v1/commons/registers/entries/&#123;entryId&#125;</code></p>\n                      <p>Search our Index</p>\n                      <p><code>/api/v1/search/&#123;searchTerm&#125;</code></p>\n                      <p><code>/api/v1/search/current/&#123;searchTerm&#125;</code></p>\n                  </div>\n              </div>\n          </div>\n      );\n  }\n}","import React, { Component } from 'react';\nimport logo from './images/csv-icon.png'\n\nexport class Download extends Component {\n    static displayName = Download.name;\n\n    constructor(props) {\n        super(props);\n\n        this.state = {\n            files: [],\n            message: ''\n        };\n    }\n\n    componentDidMount() {\n        let api = `api/v1/commons/registers/files`;\n\n        fetch(api)\n            .then((response) => {\n                if (!response.ok) throw new Error(response.status);\n                else return response.json();\n            })\n            .then((data) => {\n                this.setState({\n                    files: data,\n                    message: data.length === 0 ? <div class=\"font-italic\">No results!</div> : null\n                });\n            })\n            .catch((error) => {\n                console.log(error);\n                this.setState({\n                    files: [],\n                    message: <div class=\"font-italic\">No results!</div>\n                });\n            });\n    }\n\n    render() {\n        return (\n            <React.Fragment>\n                <div class=\"row\">\n                    <div class=\"col-md-10 offset-md-1\">\n                        <h4>Download the Register</h4>\n                        <p><i>{this.state.message}</i></p>\n                    </div>\n                </div>\n\n                <div class=\"row\">\n                    <div class=\"col-md-10 offset-md-1\">\n                        {this.state.files.map(file => {\n                            return (\n                                <div class=\"btn-group small-horizontal-spacer\">\n                                    <a href={file.url} class=\"btn btn-lg btn-info btn-attachment\">\n                                        <img alt={file.filename} src={logo} />&nbsp;\n                                        <span>{file.filename}</span>\n                                    </a>\n                                </div>\n                            )\n                        })}\n                    </div>\n                </div>\n            </React.Fragment>\n        )\n    }\n}","import React, { Component } from 'react';\nimport { Route } from 'react-router';\nimport { Layout } from './components/Layout';\nimport { Search } from './components/Search';\nimport { RegisterEntry } from './components/RegisterEntry';\nimport { NewEntries } from './components/NewEntries';\nimport { Api } from './components/Api';\nimport { Download } from './components/Download';\n\nimport './custom.css'\n\nexport default class App extends Component {\n  static displayName = App.name;\n\n  render () {\n    return (\n      <Layout>\n        <Route exact path='/' component={Search} />\n        <Route path='/commons/registers/latest' component={RegisterEntry} />\n        <Route path='/commons/entries/new' component={NewEntries} />\n        <Route path='/api' component={Api} />\n        <Route path='/commons/downloads' component={Download} />\n      </Layout>\n    );\n  }\n}\n","// In production, we register a service worker to serve assets from local cache.\n\n// This lets the app load faster on subsequent visits in production, and gives\n// it offline capabilities. However, it also means that developers (and users)\n// will only see deployed updates on the \"N+1\" visit to a page, since previously\n// cached resources are updated in the background.\n\n// To learn more about the benefits of this model, read https://goo.gl/KwvDNy.\n// This link also includes instructions on opting out of this behavior.\n\nconst isLocalhost = Boolean(\n  window.location.hostname === 'localhost' ||\n  // [::1] is the IPv6 localhost address.\n  window.location.hostname === '[::1]' ||\n  // 127.0.0.1/8 is considered localhost for IPv4.\n  window.location.hostname.match(\n    /^127(?:\\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/\n  )\n);\n\nexport default function register () {\n  if (process.env.NODE_ENV === 'production' && 'serviceWorker' in navigator) {\n    // The URL constructor is available in all browsers that support SW.\n    const publicUrl = new URL(process.env.PUBLIC_URL, window.location);\n    if (publicUrl.origin !== window.location.origin) {\n      // Our service worker won't work if PUBLIC_URL is on a different origin\n      // from what our page is served on. This might happen if a CDN is used to\n      // serve assets; see https://github.com/facebookincubator/create-react-app/issues/2374\n      return;\n    }\n\n    window.addEventListener('load', () => {\n      const swUrl = `${process.env.PUBLIC_URL}/service-worker.js`;\n\n      if (isLocalhost) {\n        // This is running on localhost. Lets check if a service worker still exists or not.\n        checkValidServiceWorker(swUrl);\n      } else {\n        // Is not local host. Just register service worker\n        registerValidSW(swUrl);\n      }\n    });\n  }\n}\n\nfunction registerValidSW (swUrl) {\n  navigator.serviceWorker\n    .register(swUrl)\n    .then(registration => {\n      registration.onupdatefound = () => {\n        const installingWorker = registration.installing;\n        installingWorker.onstatechange = () => {\n          if (installingWorker.state === 'installed') {\n            if (navigator.serviceWorker.controller) {\n              // At this point, the old content will have been purged and\n              // the fresh content will have been added to the cache.\n              // It's the perfect time to display a \"New content is\n              // available; please refresh.\" message in your web app.\n              console.log('New content is available; please refresh.');\n            } else {\n              // At this point, everything has been precached.\n              // It's the perfect time to display a\n              // \"Content is cached for offline use.\" message.\n              console.log('Content is cached for offline use.');\n            }\n          }\n        };\n      };\n    })\n    .catch(error => {\n      console.error('Error during service worker registration:', error);\n    });\n}\n\nfunction checkValidServiceWorker (swUrl) {\n  // Check if the service worker can be found. If it can't reload the page.\n  fetch(swUrl)\n    .then(response => {\n      // Ensure service worker exists, and that we really are getting a JS file.\n      if (\n        response.status === 404 ||\n        response.headers.get('content-type').indexOf('javascript') === -1\n      ) {\n        // No service worker found. Probably a different app. Reload the page.\n        navigator.serviceWorker.ready.then(registration => {\n          registration.unregister().then(() => {\n            window.location.reload();\n          });\n        });\n      } else {\n        // Service worker found. Proceed as normal.\n        registerValidSW(swUrl);\n      }\n    })\n    .catch(() => {\n      console.log(\n        'No internet connection found. App is running in offline mode.'\n      );\n    });\n}\n\nexport function unregister () {\n  if ('serviceWorker' in navigator) {\n    navigator.serviceWorker.ready.then(registration => {\n      registration.unregister();\n    });\n  }\n}\n","import 'bootstrap/dist/css/bootstrap.css';\nimport React from 'react';\nimport ReactDOM from 'react-dom';\nimport { BrowserRouter } from 'react-router-dom';\nimport App from './App';\nimport registerServiceWorker from './registerServiceWorker';\n\nconst baseUrl = document.getElementsByTagName('base')[0].getAttribute('href');\nconst rootElement = document.getElementById('root');\n\nReactDOM.render(\n  <BrowserRouter basename={baseUrl}>\n    <App />\n  </BrowserRouter>,\n  rootElement);\n\nregisterServiceWorker();\n\n"],"sourceRoot":""}