60806040526103e8600a55600f600b556103e8600d557fb45c92a1852d1ff955bb97ab63e5126403dc6fd8315d9987a9b58afc3b5ada055f1b600e55600160155f6101000a81548160ff021916908360038111156200006357620000626200023d565b5b021790555034801562000074575f80fd5b506040518060400160405280600781526020017f456e66696e656f000000000000000000000000000000000000000000000000008152506040518060400160405280600181526020017f4500000000000000000000000000000000000000000000000000000000000000815250815f9081620000f19190620004ce565b508060019081620001039190620004ce565b505050620001266200011a6200012c60201b60201c565b6200013360201b60201c565b620005b2565b5f33905090565b5f60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508060075f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508160065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426008819055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680620002e657607f821691505b602082108103620002fc57620002fb620002a1565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f60088302620003607fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000323565b6200036c868362000323565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f620003b6620003b0620003aa8462000384565b6200038d565b62000384565b9050919050565b5f819050919050565b620003d18362000396565b620003e9620003e082620003bd565b8484546200032f565b825550505050565b5f90565b620003ff620003f1565b6200040c818484620003c6565b505050565b5b818110156200043357620004275f82620003f5565b60018101905062000412565b5050565b601f82111562000482576200044c8162000302565b620004578462000314565b8101602085101562000467578190505b6200047f620004768562000314565b83018262000411565b50505b505050565b5f82821c905092915050565b5f620004a45f198460080262000487565b1980831691505092915050565b5f620004be838362000493565b9150826002028217905092915050565b620004d9826200026a565b67ffffffffffffffff811115620004f557620004f462000274565b5b620005018254620002ce565b6200050e82828562000437565b5f60209050601f83116001811462000544575f84156200052f578287015190505b6200053b8582620004b1565b865550620005aa565b601f198416620005548662000302565b5f5b828110156200057d5784890151825560018201915060208501945060208101905062000556565b868310156200059d578489015162000599601f89168262000493565b8355505b6001600288020188555050505b505050505050565b61444b80620005c05f395ff3fe608060405234801561000f575f80fd5b5060043610610246575f3560e01c80638da5cb5b11610139578063c87b56dd116100b6578063f20423141161007a578063f2042314146106c6578063f2fde38b146106e4578063f487404f14610700578063f9c957d81461071e578063fe60d12c1461073a57610246565b8063c87b56dd1461060c578063d371f76b1461063c578063d5abeb011461065a578063e921dad214610678578063e985e9c51461069657610246565b8063ab81e062116100fd578063ab81e0621461056a578063ad8c3f3314610586578063b2422232146105a2578063b88d4fde146105d2578063c051e38a146105ee57610246565b80638da5cb5b146104d857806395d89b41146104f6578063a06cb71914610514578063a22cb46514610530578063a2309ff81461054c57610246565b806335d5959a116101c75780636352211e1161018b5780636352211e146104205780636c0360eb1461045057806370a082311461046e578063715018a61461049e578063893807aa146104a857610246565b806335d5959a146103905780633c186018146103ac57806342842e0e146103ca5780634f297ccc146103e657806355f804b31461040457610246565b80630bb862d11161020e5780630bb862d11461030057806316f9b7071461031c57806323b872dd146103385780632dc7b8551461035457806332f4681c1461037257610246565b806301ffc9a71461024a57806306fdde031461027a578063081812fc14610298578063084520b4146102c8578063095ea7b3146102e4575b5f80fd5b610264600480360381019061025f9190612a19565b610758565b6040516102719190612a5e565b60405180910390f35b610282610839565b60405161028f9190612b01565b60405180910390f35b6102b260048036038101906102ad9190612b54565b6108c8565b6040516102bf9190612bbe565b60405180910390f35b6102e260048036038101906102dd9190612c01565b61090a565b005b6102fe60048036038101906102f99190612c01565b610a2e565b005b61031a60048036038101906103159190612b54565b610b44565b005b61033660048036038101906103319190612b54565b610c41565b005b610352600480360381019061034d9190612c3f565b610cc7565b005b61035c610d27565b6040516103699190612ca7565b60405180910390f35b61037a610d2d565b6040516103879190612ccf565b60405180910390f35b6103aa60048036038101906103a59190612d12565b610d33565b005b6103b4610db9565b6040516103c19190612ccf565b60405180910390f35b6103e460048036038101906103df9190612c3f565b610ddd565b005b6103ee610dfc565b6040516103fb9190612ccf565b60405180910390f35b61041e60048036038101906104199190612e69565b610e02565b005b61043a60048036038101906104359190612b54565b610e91565b6040516104479190612bbe565b60405180910390f35b610458610f15565b6040516104659190612b01565b60405180910390f35b61048860048036038101906104839190612eb0565b610fa1565b6040516104959190612ccf565b60405180910390f35b6104a6611055565b005b6104c260048036038101906104bd9190612eb0565b6110dc565b6040516104cf9190612a5e565b60405180910390f35b6104e06110f9565b6040516104ed9190612bbe565b60405180910390f35b6104fe611121565b60405161050b9190612b01565b60405180910390f35b61052e60048036038101906105299190612eb0565b6111b1565b005b61054a60048036038101906105459190612f05565b6112a4565b005b6105546112ba565b6040516105619190612ccf565b60405180910390f35b610584600480360381019061057f9190612fa0565b6112ca565b005b6105a0600480360381019061059b9190612d12565b611695565b005b6105bc60048036038101906105b79190612eb0565b61171b565b6040516105c99190612a5e565b60405180910390f35b6105ec60048036038101906105e7919061309b565b611738565b005b6105f661179a565b604051610603919061318e565b60405180910390f35b61062660048036038101906106219190612b54565b6117ac565b6040516106339190612b01565b60405180910390f35b610644611856565b6040516106519190612ccf565b60405180910390f35b610662611866565b60405161066f9190612ccf565b60405180910390f35b61068061186c565b60405161068d9190612ca7565b60405180910390f35b6106b060048036038101906106ab91906131a7565b611872565b6040516106bd9190612a5e565b60405180910390f35b6106ce611900565b6040516106db9190612ccf565b60405180910390f35b6106fe60048036038101906106f99190612eb0565b611910565b005b610708611a06565b6040516107159190612bbe565b60405180910390f35b61073860048036038101906107339190612b54565b611a2e565b005b610742611ab4565b60405161074f9190612ccf565b60405180910390f35b5f7f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061082257507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610832575061083182611aba565b5b9050919050565b60605f805461084790613212565b80601f016020809104026020016040519081016040528092919081815260200182805461087390613212565b80156108be5780601f10610895576101008083540402835291602001916108be565b820191905f5260205f20905b8154815290600101906020018083116108a157829003601f168201915b5050505050905090565b5f6108d282611b23565b60045f8381526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b610912611b6e565b73ffffffffffffffffffffffffffffffffffffffff166109306110f9565b73ffffffffffffffffffffffffffffffffffffffff1614610986576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161097d9061328c565b60405180910390fd5b600b54600c548261099791906132d7565b11156109d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109cf90613354565b60405180910390fd5b5f5b81811015610a11575f6109ed6012611b75565b90506109f96012611b81565b610a038482611b95565b8180600101925050506109da565b5080600c5f828254610a2391906132d7565b925050819055505050565b5f610a3882610e91565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610aa8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a9f906133e2565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610ac7611b6e565b73ffffffffffffffffffffffffffffffffffffffff161480610af65750610af581610af0611b6e565b611872565b5b610b35576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b2c90613470565b60405180910390fd5b610b3f8383611bb2565b505050565b610b4c611b6e565b73ffffffffffffffffffffffffffffffffffffffff16610b6a6110f9565b73ffffffffffffffffffffffffffffffffffffffff1614610bc0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bb79061328c565b60405180910390fd5b60058110610c03576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bfa906134d8565b60405180910390fd5b806003811115610c1657610c1561311b565b5b60155f6101000a81548160ff02191690836003811115610c3957610c3861311b565b5b021790555050565b610c49611b6e565b73ffffffffffffffffffffffffffffffffffffffff16610c676110f9565b73ffffffffffffffffffffffffffffffffffffffff1614610cbd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cb49061328c565b60405180910390fd5b80600b8190555050565b610cd8610cd2611b6e565b82611c68565b610d17576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d0e90613566565b60405180910390fd5b610d22838383611d44565b505050565b600e5481565b600d5481565b610d3b611b6e565b73ffffffffffffffffffffffffffffffffffffffff16610d596110f9565b73ffffffffffffffffffffffffffffffffffffffff1614610daf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610da69061328c565b60405180910390fd5b80600e8190555050565b5f610dc46014611b75565b610dce6013611b75565b610dd891906132d7565b905090565b610df783838360405180602001604052805f815250611738565b505050565b600c5481565b610e0a611b6e565b73ffffffffffffffffffffffffffffffffffffffff16610e286110f9565b73ffffffffffffffffffffffffffffffffffffffff1614610e7e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e759061328c565b60405180910390fd5b8060099081610e8d9190613721565b5050565b5f80610e9c83612042565b90505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610f0c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f039061383a565b60405180910390fd5b80915050919050565b60098054610f2290613212565b80601f0160208091040260200160405190810160405280929190818152602001828054610f4e90613212565b8015610f995780601f10610f7057610100808354040283529160200191610f99565b820191905f5260205f20905b815481529060010190602001808311610f7c57829003601f168201915b505050505081565b5f8073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611010576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611007906138c8565b60405180910390fd5b60035f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b61105d611b6e565b73ffffffffffffffffffffffffffffffffffffffff1661107b6110f9565b73ffffffffffffffffffffffffffffffffffffffff16146110d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110c89061328c565b60405180910390fd5b6110da5f61207b565b565b6011602052805f5260405f205f915054906101000a900460ff1681565b5f60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606001805461113090613212565b80601f016020809104026020016040519081016040528092919081815260200182805461115c90613212565b80156111a75780601f1061117e576101008083540402835291602001916111a7565b820191905f5260205f20905b81548152906001019060200180831161118a57829003601f168201915b5050505050905090565b6003808111156111c4576111c361311b565b5b60155f9054906101000a900460ff1660038111156111e5576111e461311b565b5b14611225576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161121c90613930565b60405180910390fd5b600b54600a54611235919061394e565b61123f6012611b75565b1061127f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611276906139f1565b60405180910390fd5b5f61128a6012611b75565b90506112966012611b81565b6112a08282611b95565b5050565b6112b66112af611b6e565b8383612185565b5050565b5f6112c56012611b75565b905090565b600160038111156112de576112dd61311b565b5b60155f9054906101000a900460ff1660038111156112ff576112fe61311b565b5b148061133d57506002600381111561131a5761131961311b565b5b60155f9054906101000a900460ff16600381111561133b5761133a61311b565b5b145b61137c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161137390613a59565b60405180910390fd5b600a546113896012611b75565b106113c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113c090613ac1565b60405180910390fd5b5f836040516020016113db9190613b24565b6040516020818303038152906040528051906020012090505f600160038111156114085761140761311b565b5b60155f9054906101000a900460ff1660038111156114295761142861311b565b5b036114de57600e549050600d5461143e611900565b1061147e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161147590613b88565b60405180910390fd5b6114886013611b81565b600160105f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505b600260038111156114f2576114f161311b565b5b60155f9054906101000a900460ff1660038111156115135761151261311b565b5b036115e257600f549050600d54600b54600a54611530919061394e565b61153a919061394e565b611542611856565b10611582576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161157990613bf0565b60405180910390fd5b61158c6014611b81565b600160115f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505b61162d8484808060200260200160405190810160405280939291908181526020018383602002808284375f81840152601f19601f8201169050808301925050505050505082846122ec565b61166c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161166390613c58565b60405180910390fd5b5f6116776012611b75565b90506116836012611b81565b61168d8682611b95565b505050505050565b61169d611b6e565b73ffffffffffffffffffffffffffffffffffffffff166116bb6110f9565b73ffffffffffffffffffffffffffffffffffffffff1614611711576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117089061328c565b60405180910390fd5b80600f8190555050565b6010602052805f5260405f205f915054906101000a900460ff1681565b611749611743611b6e565b83611c68565b611788576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161177f90613566565b60405180910390fd5b61179484848484612302565b50505050565b60155f9054906101000a900460ff1681565b60606117b86012611b75565b8211156117fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117f190613cc0565b60405180910390fd5b5f6009805461180890613212565b9050116118235760405180602001604052805f81525061184f565b600961182e8361235e565b60405160200161183f929190613dbe565b6040516020818303038152906040525b9050919050565b5f6118616014611b75565b905090565b600a5481565b600f5481565b5f60055f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16905092915050565b5f61190b6013611b75565b905090565b611918611b6e565b73ffffffffffffffffffffffffffffffffffffffff166119366110f9565b73ffffffffffffffffffffffffffffffffffffffff161461198c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119839061328c565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036119fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119f190613e60565b60405180910390fd5b611a038161207b565b50565b5f60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611a36611b6e565b73ffffffffffffffffffffffffffffffffffffffff16611a546110f9565b73ffffffffffffffffffffffffffffffffffffffff1614611aaa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aa19061328c565b60405180910390fd5b80600d8190555050565b600b5481565b5f7f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b611b2c816124b7565b611b6b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b629061383a565b60405180910390fd5b50565b5f33905090565b5f815f01549050919050565b6001815f015f828254019250508190555050565b611bae828260405180602001604052805f8152506124f7565b5050565b8160045f8381526020019081526020015f205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611c2283610e91565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b5f611c72826124b7565b611cb1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ca890613eee565b60405180910390fd5b5f611cbb83610e91565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611cfd5750611cfc8185611872565b5b80611d3b57508373ffffffffffffffffffffffffffffffffffffffff16611d23846108c8565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611d6482610e91565b73ffffffffffffffffffffffffffffffffffffffff1614611dba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611db190613f7c565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611e28576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e1f9061400a565b60405180910390fd5b611e358383836001612551565b8273ffffffffffffffffffffffffffffffffffffffff16611e5582610e91565b73ffffffffffffffffffffffffffffffffffffffff1614611eab576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ea290613f7c565b60405180910390fd5b60045f8281526020019081526020015f205f6101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055600160035f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254611f2b919061394e565b92505081905550600160035f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254611f7f91906132d7565b925050819055508160025f8381526020019081526020015f205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461203d8383836001612557565b505050565b5f60025f8381526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b5f60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508060075f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508160065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426008819055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036121f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121ea90614072565b60405180910390fd5b8060055f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516122df9190612a5e565b60405180910390a3505050565b5f826122f8858461255d565b1490509392505050565b61230d848484611d44565b6123198484848461260d565b612358576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161234f90614100565b60405180910390fd5b50505050565b60605f82036123a4576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506124b2565b5f8290505f5b5f82146123d35780806123bc9061411e565b915050600a826123cc9190614192565b91506123aa565b5f8167ffffffffffffffff8111156123ee576123ed612d45565b5b6040519080825280601f01601f1916602001820160405280156124205781602001600182028036833780820191505090505b5090505b5f85146124ab57600182612438919061394e565b9150600a8561244791906141c2565b603061245391906132d7565b60f81b818381518110612469576124686141f2565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a905350600a856124a49190614192565b9450612424565b8093505050505b919050565b5f8073ffffffffffffffffffffffffffffffffffffffff166124d883612042565b73ffffffffffffffffffffffffffffffffffffffff1614159050919050565b612501838361278f565b61250d5f84848461260d565b61254c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161254390614100565b60405180910390fd5b505050565b50505050565b50505050565b5f808290505f5b8451811015612602575f858281518110612581576125806141f2565b5b602002602001015190508083116125c25782816040516020016125a592919061423f565b6040516020818303038152906040528051906020012092506125ee565b80836040516020016125d592919061423f565b6040516020818303038152906040528051906020012092505b5080806125fa9061411e565b915050612564565b508091505092915050565b5f61262d8473ffffffffffffffffffffffffffffffffffffffff166129a2565b15612782578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612656611b6e565b8786866040518563ffffffff1660e01b815260040161267894939291906142bc565b6020604051808303815f875af19250505080156126b357506040513d601f19601f820116820180604052508101906126b0919061431a565b60015b612732573d805f81146126e1576040519150601f19603f3d011682016040523d82523d5f602084013e6126e6565b606091505b505f81510361272a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161272190614100565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612787565b600190505b949350505050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036127fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127f49061438f565b60405180910390fd5b612806816124b7565b15612846576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161283d906143f7565b60405180910390fd5b6128535f83836001612551565b61285c816124b7565b1561289c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612893906143f7565b60405180910390fd5b600160035f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055508160025f8381526020019081526020015f205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461299e5f83836001612557565b5050565b5f80823b90505f8111915050919050565b5f604051905090565b5f80fd5b5f80fd5b5f7fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6129f8816129c4565b8114612a02575f80fd5b50565b5f81359050612a13816129ef565b92915050565b5f60208284031215612a2e57612a2d6129bc565b5b5f612a3b84828501612a05565b91505092915050565b5f8115159050919050565b612a5881612a44565b82525050565b5f602082019050612a715f830184612a4f565b92915050565b5f81519050919050565b5f82825260208201905092915050565b5f5b83811015612aae578082015181840152602081019050612a93565b5f8484015250505050565b5f601f19601f8301169050919050565b5f612ad382612a77565b612add8185612a81565b9350612aed818560208601612a91565b612af681612ab9565b840191505092915050565b5f6020820190508181035f830152612b198184612ac9565b905092915050565b5f819050919050565b612b3381612b21565b8114612b3d575f80fd5b50565b5f81359050612b4e81612b2a565b92915050565b5f60208284031215612b6957612b686129bc565b5b5f612b7684828501612b40565b91505092915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f612ba882612b7f565b9050919050565b612bb881612b9e565b82525050565b5f602082019050612bd15f830184612baf565b92915050565b612be081612b9e565b8114612bea575f80fd5b50565b5f81359050612bfb81612bd7565b92915050565b5f8060408385031215612c1757612c166129bc565b5b5f612c2485828601612bed565b9250506020612c3585828601612b40565b9150509250929050565b5f805f60608486031215612c5657612c556129bc565b5b5f612c6386828701612bed565b9350506020612c7486828701612bed565b9250506040612c8586828701612b40565b9150509250925092565b5f819050919050565b612ca181612c8f565b82525050565b5f602082019050612cba5f830184612c98565b92915050565b612cc981612b21565b82525050565b5f602082019050612ce25f830184612cc0565b92915050565b612cf181612c8f565b8114612cfb575f80fd5b50565b5f81359050612d0c81612ce8565b92915050565b5f60208284031215612d2757612d266129bc565b5b5f612d3484828501612cfe565b91505092915050565b5f80fd5b5f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b612d7b82612ab9565b810181811067ffffffffffffffff82111715612d9a57612d99612d45565b5b80604052505050565b5f612dac6129b3565b9050612db88282612d72565b919050565b5f67ffffffffffffffff821115612dd757612dd6612d45565b5b612de082612ab9565b9050602081019050919050565b828183375f83830152505050565b5f612e0d612e0884612dbd565b612da3565b905082815260208101848484011115612e2957612e28612d41565b5b612e34848285612ded565b509392505050565b5f82601f830112612e5057612e4f612d3d565b5b8135612e60848260208601612dfb565b91505092915050565b5f60208284031215612e7e57612e7d6129bc565b5b5f82013567ffffffffffffffff811115612e9b57612e9a6129c0565b5b612ea784828501612e3c565b91505092915050565b5f60208284031215612ec557612ec46129bc565b5b5f612ed284828501612bed565b91505092915050565b612ee481612a44565b8114612eee575f80fd5b50565b5f81359050612eff81612edb565b92915050565b5f8060408385031215612f1b57612f1a6129bc565b5b5f612f2885828601612bed565b9250506020612f3985828601612ef1565b9150509250929050565b5f80fd5b5f80fd5b5f8083601f840112612f6057612f5f612d3d565b5b8235905067ffffffffffffffff811115612f7d57612f7c612f43565b5b602083019150836020820283011115612f9957612f98612f47565b5b9250929050565b5f805f60408486031215612fb757612fb66129bc565b5b5f612fc486828701612bed565b935050602084013567ffffffffffffffff811115612fe557612fe46129c0565b5b612ff186828701612f4b565b92509250509250925092565b5f67ffffffffffffffff82111561301757613016612d45565b5b61302082612ab9565b9050602081019050919050565b5f61303f61303a84612ffd565b612da3565b90508281526020810184848401111561305b5761305a612d41565b5b613066848285612ded565b509392505050565b5f82601f83011261308257613081612d3d565b5b813561309284826020860161302d565b91505092915050565b5f805f80608085870312156130b3576130b26129bc565b5b5f6130c087828801612bed565b94505060206130d187828801612bed565b93505060406130e287828801612b40565b925050606085013567ffffffffffffffff811115613103576131026129c0565b5b61310f8782880161306e565b91505092959194509250565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b600481106131595761315861311b565b5b50565b5f81905061316982613148565b919050565b5f6131788261315c565b9050919050565b6131888161316e565b82525050565b5f6020820190506131a15f83018461317f565b92915050565b5f80604083850312156131bd576131bc6129bc565b5b5f6131ca85828601612bed565b92505060206131db85828601612bed565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061322957607f821691505b60208210810361323c5761323b6131e5565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f613276602083612a81565b915061328182613242565b602082019050919050565b5f6020820190508181035f8301526132a38161326a565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6132e182612b21565b91506132ec83612b21565b9250828201905080821115613304576133036132aa565b5b92915050565b7f416d6f756e74206578636565647320726573657276656420737570706c7900005f82015250565b5f61333e601e83612a81565b91506133498261330a565b602082019050919050565b5f6020820190508181035f83015261336b81613332565b9050919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e655f8201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b5f6133cc602183612a81565b91506133d782613372565b604082019050919050565b5f6020820190508181035f8301526133f9816133c0565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f5f8201527f6b656e206f776e6572206f7220617070726f76656420666f7220616c6c000000602082015250565b5f61345a603d83612a81565b915061346582613400565b604082019050919050565b5f6020820190508181035f8301526134878161344e565b9050919050565b7f496e76616c6964205374617465210000000000000000000000000000000000005f82015250565b5f6134c2600e83612a81565b91506134cd8261348e565b602082019050919050565b5f6020820190508181035f8301526134ef816134b6565b9050919050565b7f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e655f8201527f72206f7220617070726f76656400000000000000000000000000000000000000602082015250565b5f613550602d83612a81565b915061355b826134f6565b604082019050919050565b5f6020820190508181035f83015261357d81613544565b9050919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f600883026135e07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826135a5565b6135ea86836135a5565b95508019841693508086168417925050509392505050565b5f819050919050565b5f61362561362061361b84612b21565b613602565b612b21565b9050919050565b5f819050919050565b61363e8361360b565b61365261364a8261362c565b8484546135b1565b825550505050565b5f90565b61366661365a565b613671818484613635565b505050565b5b81811015613694576136895f8261365e565b600181019050613677565b5050565b601f8211156136d9576136aa81613584565b6136b384613596565b810160208510156136c2578190505b6136d66136ce85613596565b830182613676565b50505b505050565b5f82821c905092915050565b5f6136f95f19846008026136de565b1980831691505092915050565b5f61371183836136ea565b9150826002028217905092915050565b61372a82612a77565b67ffffffffffffffff81111561374357613742612d45565b5b61374d8254613212565b613758828285613698565b5f60209050601f831160018114613789575f8415613777578287015190505b6137818582613706565b8655506137e8565b601f19841661379786613584565b5f5b828110156137be57848901518255600182019150602085019450602081019050613799565b868310156137db57848901516137d7601f8916826136ea565b8355505b6001600288020188555050505b505050505050565b7f4552433732313a20696e76616c696420746f6b656e20494400000000000000005f82015250565b5f613824601883612a81565b915061382f826137f0565b602082019050919050565b5f6020820190508181035f83015261385181613818565b9050919050565b7f4552433732313a2061646472657373207a65726f206973206e6f7420612076615f8201527f6c6964206f776e65720000000000000000000000000000000000000000000000602082015250565b5f6138b2602983612a81565b91506138bd82613858565b604082019050919050565b5f6020820190508181035f8301526138df816138a6565b9050919050565b7f5075626c6963206d696e7420696e6163746976650000000000000000000000005f82015250565b5f61391a601483612a81565b9150613925826138e6565b602082019050919050565b5f6020820190508181035f8301526139478161390e565b9050919050565b5f61395882612b21565b915061396383612b21565b925082820390508181111561397b5761397a6132aa565b5b92915050565b7f4d617820617661696c61626c65207075626c696320737570706c79206d696e745f8201527f6564000000000000000000000000000000000000000000000000000000000000602082015250565b5f6139db602283612a81565b91506139e682613981565b604082019050919050565b5f6020820190508181035f830152613a08816139cf565b9050919050565b7f4e6f7420696e20616c6c6f776c697374206d696e74696e6720737461746573005f82015250565b5f613a43601f83612a81565b9150613a4e82613a0f565b602082019050919050565b5f6020820190508181035f830152613a7081613a37565b9050919050565b7f4d617820737570706c79206d696e7465640000000000000000000000000000005f82015250565b5f613aab601183612a81565b9150613ab682613a77565b602082019050919050565b5f6020820190508181035f830152613ad881613a9f565b9050919050565b5f8160601b9050919050565b5f613af582613adf565b9050919050565b5f613b0682613aeb565b9050919050565b613b1e613b1982612b9e565b613afc565b82525050565b5f613b2f8284613b0d565b60148201915081905092915050565b7f4d61782067756172616e7465656420737570706c79206d696e746564000000005f82015250565b5f613b72601c83612a81565b9150613b7d82613b3e565b602082019050919050565b5f6020820190508181035f830152613b9f81613b66565b9050919050565b7f4d617820616c6c6f77206c69737420737570706c79206d696e746564000000005f82015250565b5f613bda601c83612a81565b9150613be582613ba6565b602082019050919050565b5f6020820190508181035f830152613c0781613bce565b9050919050565b7f496e76616c69642070726f6f66000000000000000000000000000000000000005f82015250565b5f613c42600d83612a81565b9150613c4d82613c0e565b602082019050919050565b5f6020820190508181035f830152613c6f81613c36565b9050919050565b7f55524920717565727920666f72206e6f6e6578697374656e7420746f6b656e005f82015250565b5f613caa601f83612a81565b9150613cb582613c76565b602082019050919050565b5f6020820190508181035f830152613cd781613c9e565b9050919050565b5f81905092915050565b5f8154613cf481613212565b613cfe8186613cde565b9450600182165f8114613d185760018114613d2d57613d5f565b60ff1983168652811515820286019350613d5f565b613d3685613584565b5f5b83811015613d5757815481890152600182019150602081019050613d38565b838801955050505b50505092915050565b5f613d7282612a77565b613d7c8185613cde565b9350613d8c818560208601612a91565b80840191505092915050565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000815250565b5f613dc98285613ce8565b9150613dd58284613d68565b9150613de082613d98565b6005820191508190509392505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f613e4a602683612a81565b9150613e5582613df0565b604082019050919050565b5f6020820190508181035f830152613e7781613e3e565b9050919050565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e65785f8201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b5f613ed8602c83612a81565b9150613ee382613e7e565b604082019050919050565b5f6020820190508181035f830152613f0581613ecc565b9050919050565b7f4552433732313a207472616e736665722066726f6d20696e636f7272656374205f8201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b5f613f66602583612a81565b9150613f7182613f0c565b604082019050919050565b5f6020820190508181035f830152613f9381613f5a565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f613ff4602483612a81565b9150613fff82613f9a565b604082019050919050565b5f6020820190508181035f83015261402181613fe8565b9050919050565b7f4552433732313a20617070726f766520746f2063616c6c6572000000000000005f82015250565b5f61405c601983612a81565b915061406782614028565b602082019050919050565b5f6020820190508181035f83015261408981614050565b9050919050565b7f4552433732313a207472616e7366657220746f206e6f6e2045524337323152655f8201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b5f6140ea603283612a81565b91506140f582614090565b604082019050919050565b5f6020820190508181035f830152614117816140de565b9050919050565b5f61412882612b21565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361415a576141596132aa565b5b600182019050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f61419c82612b21565b91506141a783612b21565b9250826141b7576141b6614165565b5b828204905092915050565b5f6141cc82612b21565b91506141d783612b21565b9250826141e7576141e6614165565b5b828206905092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f819050919050565b61423961423482612c8f565b61421f565b82525050565b5f61424a8285614228565b60208201915061425a8284614228565b6020820191508190509392505050565b5f81519050919050565b5f82825260208201905092915050565b5f61428e8261426a565b6142988185614274565b93506142a8818560208601612a91565b6142b181612ab9565b840191505092915050565b5f6080820190506142cf5f830187612baf565b6142dc6020830186612baf565b6142e96040830185612cc0565b81810360608301526142fb8184614284565b905095945050505050565b5f81519050614314816129ef565b92915050565b5f6020828403121561432f5761432e6129bc565b5b5f61433c84828501614306565b91505092915050565b7f4552433732313a206d696e7420746f20746865207a65726f20616464726573735f82015250565b5f614379602083612a81565b915061438482614345565b602082019050919050565b5f6020820190508181035f8301526143a68161436d565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e746564000000005f82015250565b5f6143e1601c83612a81565b91506143ec826143ad565b602082019050919050565b5f6020820190508181035f83015261440e816143d5565b905091905056fea264697066735822122028bcf8470fed3ef2fe3015b61befcdde431f3b0f9dbe991a894c86137cdbed6a64736f6c63430008140033