60806040526001600755348015610014575f80fd5b50336040518060600160405280602a8152602001614237602a913961003e816100c460201b60201c565b505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036100af575f6040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081526004016100a691906101d9565b60405180910390fd5b6100be816100d760201b60201c565b506104fb565b80600290816100d3919061042c565b5050565b5f60035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160035f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6101c38261019a565b9050919050565b6101d3816101b9565b82525050565b5f6020820190506101ec5f8301846101ca565b92915050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061026d57607f821691505b6020821081036102805761027f610229565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f600883026102e27fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826102a7565b6102ec86836102a7565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f61033061032b61032684610304565b61030d565b610304565b9050919050565b5f819050919050565b61034983610316565b61035d61035582610337565b8484546102b3565b825550505050565b5f90565b610371610365565b61037c818484610340565b505050565b5b8181101561039f576103945f82610369565b600181019050610382565b5050565b601f8211156103e4576103b581610286565b6103be84610298565b810160208510156103cd578190505b6103e16103d985610298565b830182610381565b50505b505050565b5f82821c905092915050565b5f6104045f19846008026103e9565b1980831691505092915050565b5f61041c83836103f5565b9150826002028217905092915050565b610435826101f2565b67ffffffffffffffff81111561044e5761044d6101fc565b5b6104588254610256565b6104638282856103a3565b5f60209050601f831160018114610494575f8415610482578287015190505b61048c8582610411565b8655506104f3565b601f1984166104a286610286565b5f5b828110156104c9578489015182556001820191506020850194506020810190506104a4565b868310156104e657848901516104e2601f8916826103f5565b8355505b6001600288020188555050505b505050505050565b613d2f806105085f395ff3fe608060405260043610610149575f3560e01c806360fb85fd116100b5578063a22cb4651161006e578063a22cb465146104c5578063bc197c81146104ed578063e985e9c514610529578063f23a6e6114610565578063f242432a146105a1578063f2fde38b146105c957610149565b806360fb85fd146103c257806366269bfc14610403578063715018a61461043f5780638bf0af3e146104555780638da5cb5b14610471578063908118401461049b57610149565b806320e7c6d41161010757806320e7c6d41461027c5780632bf217b1146102bd5780632eb2c2d6146102fa5780633bed33ce146103225780634e1273f41461034a5780635b2cdb221461038657610149565b8062fdd58e1461014d57806301ffc9a714610189578063047087cc146101c557806305e19236146101f05780630e89341c146102185780631fdfe21214610254575b5f80fd5b348015610158575f80fd5b50610173600480360381019061016e9190612aa9565b6105f1565b6040516101809190612af6565b60405180910390f35b348015610194575f80fd5b506101af60048036038101906101aa9190612b64565b610646565b6040516101bc9190612ba9565b60405180910390f35b3480156101d0575f80fd5b506101d9610657565b6040516101e7929190612bc2565b60405180910390f35b3480156101fb575f80fd5b5061021660048036038101906102119190612c13565b6106c8565b005b348015610223575f80fd5b5061023e60048036038101906102399190612c63565b610817565b60405161024b9190612cfe565b60405180910390f35b34801561025f575f80fd5b5061027a60048036038101906102759190612d1e565b6108a9565b005b348015610287575f80fd5b506102a2600480360381019061029d9190612c63565b610b58565b6040516102b496959493929190612d6b565b60405180910390f35b3480156102c8575f80fd5b506102e360048036038101906102de9190612dca565b610bbc565b6040516102f1929190612bc2565b60405180910390f35b348015610305575f80fd5b50610320600480360381019061031b9190612ff8565b610cea565b005b34801561032d575f80fd5b5061034860048036038101906103439190612c63565b610d3c565b005b348015610355575f80fd5b50610370600480360381019061036b9190613183565b610dd8565b60405161037d91906132b0565b60405180910390f35b348015610391575f80fd5b506103ac60048036038101906103a79190612d1e565b610edf565b6040516103b991906132d0565b60405180910390f35b3480156103cd575f80fd5b506103e860048036038101906103e39190612c63565b610f27565b6040516103fa969594939291906132e9565b60405180910390f35b34801561040e575f80fd5b5061042960048036038101906104249190612c63565b611016565b60405161043691906133ff565b60405180910390f35b34801561044a575f80fd5b50610453611107565b005b61046f600480360381019061046a9190612d1e565b61111a565b005b34801561047c575f80fd5b50610485611445565b60405161049291906132d0565b60405180910390f35b3480156104a6575f80fd5b506104af61146d565b6040516104bc9190612af6565b60405180910390f35b3480156104d0575f80fd5b506104eb60048036038101906104e6919061341f565b611473565b005b3480156104f8575f80fd5b50610513600480360381019061050e9190612ff8565b611489565b604051610520919061346c565b60405180910390f35b348015610534575f80fd5b5061054f600480360381019061054a9190613485565b61149d565b60405161055c9190612ba9565b60405180910390f35b348015610570575f80fd5b5061058b600480360381019061058691906134c3565b61152b565b604051610598919061346c565b60405180910390f35b3480156105ac575f80fd5b506105c760048036038101906105c291906134c3565b61153f565b005b3480156105d4575f80fd5b506105ef60048036038101906105ea9190613556565b61155e565b005b5f805f8381526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b5f610650826115e2565b9050919050565b5f805f805f600190505b6007548110156106bb5760045f8281526020019081526020015f205f01548361068a91906135ae565b925060045f8281526020019081526020015f2060010154826106ac91906135ae565b91508080600101915050610661565b5081819350935050509091565b5f60045f8581526020019081526020015f2090505f815f015411610721576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107189061362b565b60405180910390fd5b8060030160019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146107b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107aa90613693565b60405180910390fd5b82816003015f6101000a81548160ff021916908315150217905550818160020181905550837fab2770b29de2adc49d0c01df43d08c90be7762fb986cc83601866a2b78a2cf9e84846040516108099291906136b1565b60405180910390a250505050565b60606002805461082690613705565b80601f016020809104026020016040519081016040528092919081815260200182805461085290613705565b801561089d5780601f106108745761010080835404028352916020019161089d565b820191905f5260205f20905b81548152906001019060200180831161088057829003601f168201915b50505050509050919050565b6108b161165b565b5f60075490505f655af3107a400083856108cb9190613735565b6108d591906137a3565b90505f60045f8481526020019081526020015f205f01541461092c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109239061381d565b60405180910390fd5b6040518060c001604052808281526020018281526020018481526020016001151581526020013373ffffffffffffffffffffffffffffffffffffffff1681526020018581525060045f8481526020019081526020015f205f820151815f015560208201518160010155604082015181600201556060820151816003015f6101000a81548160ff02191690831515021790555060808201518160030160016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060a0820151816004015590505060055f8381526020019081526020015f2033908060018154018082558091505060019003905f5260205f20015f9091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160065f8481526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550610aff30838360405180602001604052805f8152506116e2565b817f3c6a495d6ebc5387576dc0e114d29e024f1ad1b86e0cc06a403722f05e518f4e828587604051610b339392919061383b565b60405180910390a260075f815480929190610b4d90613870565b919050555050505050565b6004602052805f5260405f205f91509050805f015490806001015490806002015490806003015f9054906101000a900460ff16908060030160019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060040154905086565b5f805f60045f8681526020019081526020015f206040518060c00160405290815f82015481526020016001820154815260200160028201548152602001600382015f9054906101000a900460ff161515151581526020016003820160019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200160048201548152505090505f815f015111610cb9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cb09061362b565b60405180910390fd5b610cc384866105f1565b9250805f0151606484610cd69190613735565b610ce091906137a3565b9150509250929050565b610cf78585858585611777565b5f5b8351811015610d3457610d27848281518110610d1857610d176138b7565b5b6020026020010151878761181e565b8080600101915050610cf9565b505050505050565b610d4461165b565b5f8190505f47905081811015610d8f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d869061392e565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc8390811502906040515f60405180830381858888f19350505050158015610dd2573d5f803e3d5ffd5b50505050565b60608151835114610e2457815183516040517f5b059991000000000000000000000000000000000000000000000000000000008152600401610e1b929190612bc2565b60405180910390fd5b5f835167ffffffffffffffff811115610e4057610e3f612e0c565b5b604051908082528060200260200182016040528015610e6e5781602001602082028036833780820191505090505b5090505f5b8451811015610ed457610eaa610e9282876119d190919063ffffffff16565b610ea583876119e490919063ffffffff16565b6105f1565b828281518110610ebd57610ebc6138b7565b5b602002602001018181525050806001019050610e73565b508091505092915050565b6005602052815f5260405f208181548110610ef8575f80fd5b905f5260205f20015f915091509054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f805f805f805f60045f8981526020019081526020015f206040518060c00160405290815f82015481526020016001820154815260200160028201548152602001600382015f9054906101000a900460ff161515151581526020016003820160019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200160048201548152505090508060a00151815f015182602001518360400151846060015185608001519650965096509650965096505091939550919395565b60605f60045f8481526020019081526020015f205f01541161106d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110649061362b565b60405180910390fd5b60055f8381526020019081526020015f208054806020026020016040519081016040528092919081815260200182805480156110fb57602002820191905f5260205f20905b815f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190600101908083116110b2575b50505050509050919050565b61110f61165b565b6111185f6119f7565b565b5f60045f8481526020019081526020015f209050806003015f9054906101000a900460ff1661117e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161117590613996565b60405180910390fd5b81816001015410156111c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111bc906139fe565b60405180910390fd5b5f8160020154836111d69190613735565b90508034101561121b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161121290613a66565b60405180910390fd5b80341115611278575f81346112309190613a84565b90503373ffffffffffffffffffffffffffffffffffffffff166108fc8290811502906040515f60405180830381858888f19350505050158015611275573d5f803e3d5ffd5b50505b82826001015f82825461128b9190613a84565b925050819055505f8260010154036112b9575f826003015f6101000a81548160ff0219169083151502179055505b6112d43033868660405180602001604052805f815250611aba565b60065f8581526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff166114055760055f8581526020019081526020015f2033908060018154018082558091505060019003905f5260205f20015f9091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160065f8681526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505b837faf357506555a8fdf38c81d9a8fa2c6bca372e817f179cf596c9645902a927aea3385604051611437929190613ab7565b60405180910390a250505050565b5f60035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60075481565b61148561147e611bc0565b8383611bc7565b5050565b5f63bc197c8160e01b905095945050505050565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16905092915050565b5f63f23a6e6160e01b905095945050505050565b61154c8585858585611d30565b61155783868661181e565b5050505050565b61156661165b565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036115d6575f6040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081526004016115cd91906132d0565b60405180910390fd5b6115df816119f7565b50565b5f7f4e2312e0000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611654575061165382611dd7565b5b9050919050565b611663611bc0565b73ffffffffffffffffffffffffffffffffffffffff16611681611445565b73ffffffffffffffffffffffffffffffffffffffff16146116e0576116a4611bc0565b6040517f118cdaa70000000000000000000000000000000000000000000000000000000081526004016116d791906132d0565b60405180910390fd5b565b5f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603611752575f6040517f57f447ce00000000000000000000000000000000000000000000000000000000815260040161174991906132d0565b60405180910390fd5b5f8061175e8585611eb8565b9150915061176f5f87848487611ee8565b505050505050565b5f611780611bc0565b90508073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16141580156117c557506117c3868261149d565b155b156118095780866040517fe237d922000000000000000000000000000000000000000000000000000000008152600401611800929190613ade565b60405180910390fd5b6118168686868686611f94565b505050505050565b5f61182983856105f1565b14801561188b575060065f8481526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b1561189b5761189a8383612088565b5b60065f8481526020019081526020015f205f8273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff166119cc5760055f8481526020019081526020015f2081908060018154018082558091505060019003905f5260205f20015f9091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160065f8581526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505b505050565b5f60208202602084010151905092915050565b5f60208202602084010151905092915050565b5f60035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160035f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603611b2a575f6040517f57f447ce000000000000000000000000000000000000000000000000000000008152600401611b2191906132d0565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1603611b9a575f6040517f01a83514000000000000000000000000000000000000000000000000000000008152600401611b9191906132d0565b60405180910390fd5b5f80611ba68585611eb8565b91509150611bb78787848487611ee8565b50505050505050565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611c37575f6040517fced3e100000000000000000000000000000000000000000000000000000000008152600401611c2e91906132d0565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611d239190612ba9565b60405180910390a3505050565b5f611d39611bc0565b90508073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614158015611d7e5750611d7c868261149d565b155b15611dc25780866040517fe237d922000000000000000000000000000000000000000000000000000000008152600401611db9929190613ade565b60405180910390fd5b611dcf8686868686611aba565b505050505050565b5f7fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611ea157507f0e89341c000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80611eb15750611eb0826122b4565b5b9050919050565b60608060405191506001825283602083015260408201905060018152826020820152604081016040529250929050565b611ef48585858561231d565b5f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614611f8d575f611f30611bc0565b90506001845103611f7c575f611f4f5f866119e490919063ffffffff16565b90505f611f655f866119e490919063ffffffff16565b9050611f758389898585896126ad565b5050611f8b565b611f8a81878787878761285c565b5b505b5050505050565b5f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603612004575f6040517f57f447ce000000000000000000000000000000000000000000000000000000008152600401611ffb91906132d0565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1603612074575f6040517f01a8351400000000000000000000000000000000000000000000000000000000815260040161206b91906132d0565b60405180910390fd5b6120818585858585611ee8565b5050505050565b5f60055f8481526020019081526020015f208054905090505f5b8181101561224b578273ffffffffffffffffffffffffffffffffffffffff1660055f8681526020019081526020015f2082815481106120e4576120e36138b7565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff160361223e5760055f8581526020019081526020015f206001836121459190613a84565b81548110612156576121556138b7565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660055f8681526020019081526020015f2082815481106121a1576121a06138b7565b5b905f5260205f20015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060055f8581526020019081526020015f2080548061220757612206613b05565b5b600190038181905f5260205f20015f6101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055905561224b565b80806001019150506120a2565b505f60065f8581526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550505050565b5f7f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b805182511461236757815181516040517f5b05999100000000000000000000000000000000000000000000000000000000815260040161235e929190612bc2565b60405180910390fd5b5f612370611bc0565b90505f5b835181101561256c575f61239182866119e490919063ffffffff16565b90505f6123a783866119e490919063ffffffff16565b90505f73ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff16146124ca575f805f8481526020019081526020015f205f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490508181101561247657888183856040517f03dee4c500000000000000000000000000000000000000000000000000000000815260040161246d9493929190613b32565b60405180910390fd5b8181035f808581526020019081526020015f205f8b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550505b5f73ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff161461255f57805f808481526020019081526020015f205f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825461255791906135ae565b925050819055505b5050806001019050612374565b506001835103612627575f61258a5f856119e490919063ffffffff16565b90505f6125a05f856119e490919063ffffffff16565b90508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628585604051612618929190612bc2565b60405180910390a450506126a6565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb868660405161269d929190613b75565b60405180910390a45b5050505050565b5f8473ffffffffffffffffffffffffffffffffffffffff163b1115612854578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b815260040161270d959493929190613bfc565b6020604051808303815f875af192505050801561274857506040513d601f19601f820116820180604052508101906127459190613c68565b60015b6127c9573d805f8114612776576040519150601f19603f3d011682016040523d82523d5f602084013e61277b565b606091505b505f8151036127c157846040517f57f447ce0000000000000000000000000000000000000000000000000000000081526004016127b891906132d0565b60405180910390fd5b805181602001fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161461285257846040517f57f447ce00000000000000000000000000000000000000000000000000000000815260040161284991906132d0565b60405180910390fd5b505b505050505050565b5f8473ffffffffffffffffffffffffffffffffffffffff163b1115612a03578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b81526004016128bc959493929190613c93565b6020604051808303815f875af19250505080156128f757506040513d601f19601f820116820180604052508101906128f49190613c68565b60015b612978573d805f8114612925576040519150601f19603f3d011682016040523d82523d5f602084013e61292a565b606091505b505f81510361297057846040517f57f447ce00000000000000000000000000000000000000000000000000000000815260040161296791906132d0565b60405180910390fd5b805181602001fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612a0157846040517f57f447ce0000000000000000000000000000000000000000000000000000000081526004016129f891906132d0565b60405180910390fd5b505b505050505050565b5f604051905090565b5f80fd5b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f612a4582612a1c565b9050919050565b612a5581612a3b565b8114612a5f575f80fd5b50565b5f81359050612a7081612a4c565b92915050565b5f819050919050565b612a8881612a76565b8114612a92575f80fd5b50565b5f81359050612aa381612a7f565b92915050565b5f8060408385031215612abf57612abe612a14565b5b5f612acc85828601612a62565b9250506020612add85828601612a95565b9150509250929050565b612af081612a76565b82525050565b5f602082019050612b095f830184612ae7565b92915050565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b612b4381612b0f565b8114612b4d575f80fd5b50565b5f81359050612b5e81612b3a565b92915050565b5f60208284031215612b7957612b78612a14565b5b5f612b8684828501612b50565b91505092915050565b5f8115159050919050565b612ba381612b8f565b82525050565b5f602082019050612bbc5f830184612b9a565b92915050565b5f604082019050612bd55f830185612ae7565b612be26020830184612ae7565b9392505050565b612bf281612b8f565b8114612bfc575f80fd5b50565b5f81359050612c0d81612be9565b92915050565b5f805f60608486031215612c2a57612c29612a14565b5b5f612c3786828701612a95565b9350506020612c4886828701612bff565b9250506040612c5986828701612a95565b9150509250925092565b5f60208284031215612c7857612c77612a14565b5b5f612c8584828501612a95565b91505092915050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f612cd082612c8e565b612cda8185612c98565b9350612cea818560208601612ca8565b612cf381612cb6565b840191505092915050565b5f6020820190508181035f830152612d168184612cc6565b905092915050565b5f8060408385031215612d3457612d33612a14565b5b5f612d4185828601612a95565b9250506020612d5285828601612a95565b9150509250929050565b612d6581612a3b565b82525050565b5f60c082019050612d7e5f830189612ae7565b612d8b6020830188612ae7565b612d986040830187612ae7565b612da56060830186612b9a565b612db26080830185612d5c565b612dbf60a0830184612ae7565b979650505050505050565b5f8060408385031215612de057612ddf612a14565b5b5f612ded85828601612a95565b9250506020612dfe85828601612a62565b9150509250929050565b5f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b612e4282612cb6565b810181811067ffffffffffffffff82111715612e6157612e60612e0c565b5b80604052505050565b5f612e73612a0b565b9050612e7f8282612e39565b919050565b5f67ffffffffffffffff821115612e9e57612e9d612e0c565b5b602082029050602081019050919050565b5f80fd5b5f612ec5612ec084612e84565b612e6a565b90508083825260208201905060208402830185811115612ee857612ee7612eaf565b5b835b81811015612f115780612efd8882612a95565b845260208401935050602081019050612eea565b5050509392505050565b5f82601f830112612f2f57612f2e612e08565b5b8135612f3f848260208601612eb3565b91505092915050565b5f80fd5b5f67ffffffffffffffff821115612f6657612f65612e0c565b5b612f6f82612cb6565b9050602081019050919050565b828183375f83830152505050565b5f612f9c612f9784612f4c565b612e6a565b905082815260208101848484011115612fb857612fb7612f48565b5b612fc3848285612f7c565b509392505050565b5f82601f830112612fdf57612fde612e08565b5b8135612fef848260208601612f8a565b91505092915050565b5f805f805f60a0868803121561301157613010612a14565b5b5f61301e88828901612a62565b955050602061302f88828901612a62565b945050604086013567ffffffffffffffff8111156130505761304f612a18565b5b61305c88828901612f1b565b935050606086013567ffffffffffffffff81111561307d5761307c612a18565b5b61308988828901612f1b565b925050608086013567ffffffffffffffff8111156130aa576130a9612a18565b5b6130b688828901612fcb565b9150509295509295909350565b5f67ffffffffffffffff8211156130dd576130dc612e0c565b5b602082029050602081019050919050565b5f6131006130fb846130c3565b612e6a565b9050808382526020820190506020840283018581111561312357613122612eaf565b5b835b8181101561314c57806131388882612a62565b845260208401935050602081019050613125565b5050509392505050565b5f82601f83011261316a57613169612e08565b5b813561317a8482602086016130ee565b91505092915050565b5f806040838503121561319957613198612a14565b5b5f83013567ffffffffffffffff8111156131b6576131b5612a18565b5b6131c285828601613156565b925050602083013567ffffffffffffffff8111156131e3576131e2612a18565b5b6131ef85828601612f1b565b9150509250929050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b61322b81612a76565b82525050565b5f61323c8383613222565b60208301905092915050565b5f602082019050919050565b5f61325e826131f9565b6132688185613203565b935061327383613213565b805f5b838110156132a357815161328a8882613231565b975061329583613248565b925050600181019050613276565b5085935050505092915050565b5f6020820190508181035f8301526132c88184613254565b905092915050565b5f6020820190506132e35f830184612d5c565b92915050565b5f60c0820190506132fc5f830189612ae7565b6133096020830188612ae7565b6133166040830187612ae7565b6133236060830186612ae7565b6133306080830185612b9a565b61333d60a0830184612d5c565b979650505050505050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b61337a81612a3b565b82525050565b5f61338b8383613371565b60208301905092915050565b5f602082019050919050565b5f6133ad82613348565b6133b78185613352565b93506133c283613362565b805f5b838110156133f25781516133d98882613380565b97506133e483613397565b9250506001810190506133c5565b5085935050505092915050565b5f6020820190508181035f83015261341781846133a3565b905092915050565b5f806040838503121561343557613434612a14565b5b5f61344285828601612a62565b925050602061345385828601612bff565b9150509250929050565b61346681612b0f565b82525050565b5f60208201905061347f5f83018461345d565b92915050565b5f806040838503121561349b5761349a612a14565b5b5f6134a885828601612a62565b92505060206134b985828601612a62565b9150509250929050565b5f805f805f60a086880312156134dc576134db612a14565b5b5f6134e988828901612a62565b95505060206134fa88828901612a62565b945050604061350b88828901612a95565b935050606061351c88828901612a95565b925050608086013567ffffffffffffffff81111561353d5761353c612a18565b5b61354988828901612fcb565b9150509295509295909350565b5f6020828403121561356b5761356a612a14565b5b5f61357884828501612a62565b91505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6135b882612a76565b91506135c383612a76565b92508282019050808211156135db576135da613581565b5b92915050565b7f4c616e642070617263656c20646f6573206e6f742065786973740000000000005f82015250565b5f613615601a83612c98565b9150613620826135e1565b602082019050919050565b5f6020820190508181035f83015261364281613609565b9050919050565b7f4f6e6c792073656c6c65722063616e207570646174652073616c6500000000005f82015250565b5f61367d601b83612c98565b915061368882613649565b602082019050919050565b5f6020820190508181035f8301526136aa81613671565b9050919050565b5f6040820190506136c45f830185612b9a565b6136d16020830184612ae7565b9392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061371c57607f821691505b60208210810361372f5761372e6136d8565b5b50919050565b5f61373f82612a76565b915061374a83612a76565b925082820261375881612a76565b9150828204841483151761376f5761376e613581565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f6137ad82612a76565b91506137b883612a76565b9250826137c8576137c7613776565b5b828204905092915050565b7f4c616e642070617263656c20616c7265616479206578697374730000000000005f82015250565b5f613807601a83612c98565b9150613812826137d3565b602082019050919050565b5f6020820190508181035f830152613834816137fb565b9050919050565b5f60608201905061384e5f830186612ae7565b61385b6020830185612ae7565b6138686040830184612ae7565b949350505050565b5f61387a82612a76565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036138ac576138ab613581565b5b600182019050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f496e73756666696369656e7420636f6e74726163742062616c616e63650000005f82015250565b5f613918601d83612c98565b9150613923826138e4565b602082019050919050565b5f6020820190508181035f8301526139458161390c565b9050919050565b7f4c616e642070617263656c206e6f7420666f722073616c6500000000000000005f82015250565b5f613980601883612c98565b915061398b8261394c565b602082019050919050565b5f6020820190508181035f8301526139ad81613974565b9050919050565b7f496e73756666696369656e7420746f6b656e7320617661696c61626c650000005f82015250565b5f6139e8601d83612c98565b91506139f3826139b4565b602082019050919050565b5f6020820190508181035f830152613a15816139dc565b9050919050565b7f496e636f7272656374207061796d656e7420616d6f756e7400000000000000005f82015250565b5f613a50601883612c98565b9150613a5b82613a1c565b602082019050919050565b5f6020820190508181035f830152613a7d81613a44565b9050919050565b5f613a8e82612a76565b9150613a9983612a76565b9250828203905081811115613ab157613ab0613581565b5b92915050565b5f604082019050613aca5f830185612d5c565b613ad76020830184612ae7565b9392505050565b5f604082019050613af15f830185612d5c565b613afe6020830184612d5c565b9392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603160045260245ffd5b5f608082019050613b455f830187612d5c565b613b526020830186612ae7565b613b5f6040830185612ae7565b613b6c6060830184612ae7565b95945050505050565b5f6040820190508181035f830152613b8d8185613254565b90508181036020830152613ba18184613254565b90509392505050565b5f81519050919050565b5f82825260208201905092915050565b5f613bce82613baa565b613bd88185613bb4565b9350613be8818560208601612ca8565b613bf181612cb6565b840191505092915050565b5f60a082019050613c0f5f830188612d5c565b613c1c6020830187612d5c565b613c296040830186612ae7565b613c366060830185612ae7565b8181036080830152613c488184613bc4565b90509695505050505050565b5f81519050613c6281612b3a565b92915050565b5f60208284031215613c7d57613c7c612a14565b5b5f613c8a84828501613c54565b91505092915050565b5f60a082019050613ca65f830188612d5c565b613cb36020830187612d5c565b8181036040830152613cc58186613254565b90508181036060830152613cd98185613254565b90508181036080830152613ced8184613bc4565b9050969550505050505056fea26469706673582212203330197cada78f9f6b02fdb06583ab4e9454d399d7f8be826ae17bb447689b7464736f6c634300081a003368747470733a2f2f6170692e6578616d706c652e636f6d2f6d657461646174612f7b69647d2e6a736f6e