0x60806040526040518060400160405280600581526020017f2e6a736f6e000000000000000000000000000000000000000000000000000000815250600c90816200004a9190620005ac565b50670de0b6b3a7640000600e55612710600f55601460105560036011556000601260006101000a81548160ff0219169083151502179055506000601260016101000a81548160ff0219169083151502179055506001601260026101000a81548160ff021916908315150217905550348015620000c557600080fd5b506040516200574c3803806200574c8339818101604052810190620000eb9190620007f7565b83838160009081620000fe9190620005ac565b508060019081620001109190620005ac565b50505062000133620001276200015f60201b60201c565b6200016760201b60201c565b62000144826200022d60201b60201c565b62000155816200025260201b60201c565b5050505062000968565b600033905090565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6200023d6200027760201b60201c565b80600b90816200024e9190620005ac565b5050565b620002626200027760201b60201c565b80600d9081620002739190620005ac565b5050565b620002876200015f60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620002ad6200030860201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000306576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620002fd9062000946565b60405180910390fd5b565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620003b457607f821691505b602082108103620003ca57620003c96200036c565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620004347fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82620003f5565b620004408683620003f5565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b60006200048d62000487620004818462000458565b62000462565b62000458565b9050919050565b6000819050919050565b620004a9836200046c565b620004c1620004b88262000494565b84845462000402565b825550505050565b600090565b620004d8620004c9565b620004e58184846200049e565b505050565b5b818110156200050d5762000501600082620004ce565b600181019050620004eb565b5050565b601f8211156200055c576200052681620003d0565b6200053184620003e5565b8101602085101562000541578190505b620005596200055085620003e5565b830182620004ea565b50505b505050565b600082821c905092915050565b6000620005816000198460080262000561565b1980831691505092915050565b60006200059c83836200056e565b9150826002028217905092915050565b620005b78262000332565b67ffffffffffffffff811115620005d357620005d26200033d565b5b620005df82546200039b565b620005ec82828562000511565b600060209050601f8311600181146200062457600084156200060f578287015190505b6200061b85826200058e565b8655506200068b565b601f1984166200063486620003d0565b60005b828110156200065e5784890151825560018201915060208501945060208101905062000637565b868310156200067e57848901516200067a601f8916826200056e565b8355505b6001600288020188555050505b505050505050565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b620006cd82620006b1565b810181811067ffffffffffffffff82111715620006ef57620006ee6200033d565b5b80604052505050565b60006200070462000693565b9050620007128282620006c2565b919050565b600067ffffffffffffffff8211156200073557620007346200033d565b5b6200074082620006b1565b9050602081019050919050565b60005b838110156200076d57808201518184015260208101905062000750565b60008484015250505050565b6000620007906200078a8462000717565b620006f8565b905082815260208101848484011115620007af57620007ae620006ac565b5b620007bc8482856200074d565b509392505050565b600082601f830112620007dc57620007db620006a7565b5b8151620007ee84826020860162000779565b91505092915050565b600080600080608085870312156200081457620008136200069d565b5b600085015167ffffffffffffffff811115620008355762000834620006a2565b5b6200084387828801620007c4565b945050602085015167ffffffffffffffff811115620008675762000866620006a2565b5b6200087587828801620007c4565b935050604085015167ffffffffffffffff811115620008995762000898620006a2565b5b620008a787828801620007c4565b925050606085015167ffffffffffffffff811115620008cb57620008ca620006a2565b5b620008d987828801620007c4565b91505092959194509250565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006200092e602083620008e5565b91506200093b82620008f6565b602082019050919050565b6000602082019050818103600083015262000961816200091f565b9050919050565b614dd480620009786000396000f3fe6080604052600436106102725760003560e01c80636352211e1161014f578063b88d4fde116100c1578063d5abeb011161007a578063d5abeb011461095c578063da3ef23f14610987578063e985e9c5146109b0578063edec5f27146109ed578063f2c4ce1e14610a16578063f2fde38b14610a3f57610272565b8063b88d4fde1461083a578063ba4e5c4914610863578063ba7d2c76146108a0578063c6682862146108cb578063c87b56dd146108f6578063d0eb26b01461093357610272565b80638da5cb5b116101135780638da5cb5b1461075d57806395d89b41146107885780639c70b512146107b3578063a0712d68146107de578063a22cb465146107fa578063a475b5dd1461082357610272565b80636352211e146106785780636c0360eb146106b557806370a08231146106e0578063715018a61461071d5780637f00c7a61461073457610272565b80632f745c59116101e8578063438b6300116101ac578063438b63001461055657806344a0d68a146105935780634f6ccce7146105bc57806351830227146105f957806355f804b3146106245780635c975abb1461064d57610272565b80632f745c59146104805780633af32abf146104bd5780633c952764146104fa5780633ccfd60b1461052357806342842e0e1461052d57610272565b8063095ea7b31161023a578063095ea7b31461037057806313faede61461039957806318160ddd146103c457806318cae269146103ef578063239c70ae1461042c57806323b872dd1461045757610272565b806301ffc9a71461027757806302329a29146102b457806306fdde03146102dd578063081812fc14610308578063081c8c4414610345575b600080fd5b34801561028357600080fd5b5061029e600480360381019061029991906132c8565b610a68565b6040516102ab9190613310565b60405180910390f35b3480156102c057600080fd5b506102db60048036038101906102d69190613357565b610ae2565b005b3480156102e957600080fd5b506102f2610b07565b6040516102ff9190613414565b60405180910390f35b34801561031457600080fd5b5061032f600480360381019061032a919061346c565b610b99565b60405161033c91906134da565b60405180910390f35b34801561035157600080fd5b5061035a610bdf565b6040516103679190613414565b60405180910390f35b34801561037c57600080fd5b5061039760048036038101906103929190613521565b610c6d565b005b3480156103a557600080fd5b506103ae610d84565b6040516103bb9190613570565b60405180910390f35b3480156103d057600080fd5b506103d9610d8a565b6040516103e69190613570565b60405180910390f35b3480156103fb57600080fd5b506104166004803603810190610411919061358b565b610d97565b6040516104239190613570565b60405180910390f35b34801561043857600080fd5b50610441610daf565b60405161044e9190613570565b60405180910390f35b34801561046357600080fd5b5061047e600480360381019061047991906135b8565b610db5565b005b34801561048c57600080fd5b506104a760048036038101906104a29190613521565b610e15565b6040516104b49190613570565b60405180910390f35b3480156104c957600080fd5b506104e460048036038101906104df919061358b565b610eba565b6040516104f19190613310565b60405180910390f35b34801561050657600080fd5b50610521600480360381019061051c9190613357565b610f68565b005b61052b610f8d565b005b34801561053957600080fd5b50610554600480360381019061054f91906135b8565b6110b8565b005b34801561056257600080fd5b5061057d6004803603810190610578919061358b565b6110d8565b60405161058a91906136c9565b60405180910390f35b34801561059f57600080fd5b506105ba60048036038101906105b5919061346c565b611186565b005b3480156105c857600080fd5b506105e360048036038101906105de919061346c565b611198565b6040516105f09190613570565b60405180910390f35b34801561060557600080fd5b5061060e611209565b60405161061b9190613310565b60405180910390f35b34801561063057600080fd5b5061064b60048036038101906106469190613820565b61121c565b005b34801561065957600080fd5b50610662611237565b60405161066f9190613310565b60405180910390f35b34801561068457600080fd5b5061069f600480360381019061069a919061346c565b61124a565b6040516106ac91906134da565b60405180910390f35b3480156106c157600080fd5b506106ca6112d0565b6040516106d79190613414565b60405180910390f35b3480156106ec57600080fd5b506107076004803603810190610702919061358b565b61135e565b6040516107149190613570565b60405180910390f35b34801561072957600080fd5b50610732611415565b005b34801561074057600080fd5b5061075b6004803603810190610756919061346c565b611429565b005b34801561076957600080fd5b5061077261143b565b60405161077f91906134da565b60405180910390f35b34801561079457600080fd5b5061079d611465565b6040516107aa9190613414565b60405180910390f35b3480156107bf57600080fd5b506107c86114f7565b6040516107d59190613310565b60405180910390f35b6107f860048036038101906107f3919061346c565b61150a565b005b34801561080657600080fd5b50610821600480360381019061081c9190613869565b611852565b005b34801561082f57600080fd5b50610838611868565b005b34801561084657600080fd5b50610861600480360381019061085c919061394a565b61188d565b005b34801561086f57600080fd5b5061088a6004803603810190610885919061346c565b6118ef565b60405161089791906134da565b60405180910390f35b3480156108ac57600080fd5b506108b561192e565b6040516108c29190613570565b60405180910390f35b3480156108d757600080fd5b506108e0611934565b6040516108ed9190613414565b60405180910390f35b34801561090257600080fd5b5061091d6004803603810190610918919061346c565b6119c2565b60405161092a9190613414565b60405180910390f35b34801561093f57600080fd5b5061095a6004803603810190610955919061346c565b611b1a565b005b34801561096857600080fd5b50610971611b2c565b60405161097e9190613570565b60405180910390f35b34801561099357600080fd5b506109ae60048036038101906109a99190613820565b611b32565b005b3480156109bc57600080fd5b506109d760048036038101906109d291906139cd565b611b4d565b6040516109e49190613310565b60405180910390f35b3480156109f957600080fd5b50610a146004803603810190610a0f9190613a6d565b611be1565b005b348015610a2257600080fd5b50610a3d6004803603810190610a389190613820565b611c0d565b005b348015610a4b57600080fd5b50610a666004803603810190610a61919061358b565b611c28565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610adb5750610ada82611cab565b5b9050919050565b610aea611d8d565b80601260006101000a81548160ff02191690831515021790555050565b606060008054610b1690613ae9565b80601f0160208091040260200160405190810160405280929190818152602001828054610b4290613ae9565b8015610b8f5780601f10610b6457610100808354040283529160200191610b8f565b820191906000526020600020905b815481529060010190602001808311610b7257829003601f168201915b5050505050905090565b6000610ba482611e0b565b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600d8054610bec90613ae9565b80601f0160208091040260200160405190810160405280929190818152602001828054610c1890613ae9565b8015610c655780601f10610c3a57610100808354040283529160200191610c65565b820191906000526020600020905b815481529060010190602001808311610c4857829003601f168201915b505050505081565b6000610c788261124a565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610ce8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cdf90613b8c565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610d07611e56565b73ffffffffffffffffffffffffffffffffffffffff161480610d365750610d3581610d30611e56565b611b4d565b5b610d75576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d6c90613c1e565b60405180910390fd5b610d7f8383611e5e565b505050565b600e5481565b6000600880549050905090565b60146020528060005260406000206000915090505481565b60105481565b610dc6610dc0611e56565b82611f17565b610e05576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dfc90613cb0565b60405180910390fd5b610e10838383611fac565b505050565b6000610e208361135e565b8210610e61576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e5890613d42565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b600080600090505b601380549050811015610f5d578273ffffffffffffffffffffffffffffffffffffffff1660138281548110610efa57610ef9613d62565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603610f4a576001915050610f63565b8080610f5590613dc0565b915050610ec2565b50600090505b919050565b610f70611d8d565b80601260026101000a81548160ff02191690831515021790555050565b610f95611d8d565b600073943590a42c27d08e3744202c4ae5ed55c2de240d73ffffffffffffffffffffffffffffffffffffffff166064600547610fd19190613e08565b610fdb9190613e79565b604051610fe790613edb565b60006040518083038185875af1925050503d8060008114611024576040519150601f19603f3d011682016040523d82523d6000602084013e611029565b606091505b505090508061103757600080fd5b600061104161143b565b73ffffffffffffffffffffffffffffffffffffffff164760405161106490613edb565b60006040518083038185875af1925050503d80600081146110a1576040519150601f19603f3d011682016040523d82523d6000602084013e6110a6565b606091505b50509050806110b457600080fd5b5050565b6110d38383836040518060200160405280600081525061188d565b505050565b606060006110e58361135e565b905060008167ffffffffffffffff811115611103576111026136f5565b5b6040519080825280602002602001820160405280156111315781602001602082028036833780820191505090505b50905060005b8281101561117b576111498582610e15565b82828151811061115c5761115b613d62565b5b602002602001018181525050808061117390613dc0565b915050611137565b508092505050919050565b61118e611d8d565b80600e8190555050565b60006111a2610d8a565b82106111e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111da90613f62565b60405180910390fd5b600882815481106111f7576111f6613d62565b5b90600052602060002001549050919050565b601260019054906101000a900460ff1681565b611224611d8d565b80600b9081611233919061412e565b5050565b601260009054906101000a900460ff1681565b600080611256836122a5565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036112c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112be9061424c565b60405180910390fd5b80915050919050565b600b80546112dd90613ae9565b80601f016020809104026020016040519081016040528092919081815260200182805461130990613ae9565b80156113565780601f1061132b57610100808354040283529160200191611356565b820191906000526020600020905b81548152906001019060200180831161133957829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036113ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113c5906142de565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61141d611d8d565b61142760006122e2565b565b611431611d8d565b8060108190555050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606001805461147490613ae9565b80601f01602080910402602001604051908101604052809291908181526020018280546114a090613ae9565b80156114ed5780601f106114c2576101008083540402835291602001916114ed565b820191906000526020600020905b8154815290600101906020018083116114d057829003601f168201915b5050505050905090565b601260029054906101000a900460ff1681565b601260009054906101000a900460ff161561155a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115519061434a565b60405180910390fd5b6000611564610d8a565b9050600082116115a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115a0906143b6565b60405180910390fd5b6010548211156115ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115e590614448565b60405180910390fd5b600f5482826115fd9190614468565b111561163e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611635906144e8565b60405180910390fd5b61164661143b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146117c25760011515601260029054906101000a900460ff161515036117715761169c33610eba565b6116db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116d290614554565b60405180910390fd5b6000601460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050601154838261172e9190614468565b111561176f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611766906145c0565b60405180910390fd5b505b81600e5461177f9190613e08565b3410156117c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117b89061462c565b60405180910390fd5b5b6000600190505b82811161184d57601460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600081548092919061182090613dc0565b919050555061183a3382846118359190614468565b6123a8565b808061184590613dc0565b9150506117c9565b505050565b61186461185d611e56565b83836123c6565b5050565b611870611d8d565b6001601260016101000a81548160ff021916908315150217905550565b61189e611898611e56565b83611f17565b6118dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118d490613cb0565b60405180910390fd5b6118e984848484612532565b50505050565b601381815481106118ff57600080fd5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60115481565b600c805461194190613ae9565b80601f016020809104026020016040519081016040528092919081815260200182805461196d90613ae9565b80156119ba5780601f1061198f576101008083540402835291602001916119ba565b820191906000526020600020905b81548152906001019060200180831161199d57829003601f168201915b505050505081565b60606119cd8261258e565b611a0c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a03906146be565b60405180910390fd5b60001515601260019054906101000a900460ff16151503611ab957600d8054611a3490613ae9565b80601f0160208091040260200160405190810160405280929190818152602001828054611a6090613ae9565b8015611aad5780601f10611a8257610100808354040283529160200191611aad565b820191906000526020600020905b815481529060010190602001808311611a9057829003601f168201915b50505050509050611b15565b6000611ac36125cf565b90506000815111611ae35760405180602001604052806000815250611b11565b80611aed84612661565b600c604051602001611b019392919061479d565b6040516020818303038152906040525b9150505b919050565b611b22611d8d565b8060118190555050565b600f5481565b611b3a611d8d565b80600c9081611b49919061412e565b5050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611be9611d8d565b60136000611bf7919061317e565b818160139190611c0892919061319f565b505050565b611c15611d8d565b80600d9081611c24919061412e565b5050565b611c30611d8d565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611c9f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c9690614840565b60405180910390fd5b611ca8816122e2565b50565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611d7657507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80611d865750611d858261272f565b5b9050919050565b611d95611e56565b73ffffffffffffffffffffffffffffffffffffffff16611db361143b565b73ffffffffffffffffffffffffffffffffffffffff1614611e09576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e00906148ac565b60405180910390fd5b565b611e148161258e565b611e53576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e4a9061424c565b60405180910390fd5b50565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611ed18361124a565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600080611f238361124a565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611f655750611f648185611b4d565b5b80611fa357508373ffffffffffffffffffffffffffffffffffffffff16611f8b84610b99565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611fcc8261124a565b73ffffffffffffffffffffffffffffffffffffffff1614612022576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120199061493e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612091576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612088906149d0565b60405180910390fd5b61209e8383836001612799565b8273ffffffffffffffffffffffffffffffffffffffff166120be8261124a565b73ffffffffffffffffffffffffffffffffffffffff1614612114576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161210b9061493e565b60405180910390fd5b6004600082815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540192505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46122a083838360016128f7565b505050565b60006002600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6123c28282604051806020016040528060008152506128fd565b5050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612434576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161242b90614a3c565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516125259190613310565b60405180910390a3505050565b61253d848484611fac565b61254984848484612958565b612588576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161257f90614ace565b60405180910390fd5b50505050565b60008073ffffffffffffffffffffffffffffffffffffffff166125b0836122a5565b73ffffffffffffffffffffffffffffffffffffffff1614159050919050565b6060600b80546125de90613ae9565b80601f016020809104026020016040519081016040528092919081815260200182805461260a90613ae9565b80156126575780601f1061262c57610100808354040283529160200191612657565b820191906000526020600020905b81548152906001019060200180831161263a57829003601f168201915b5050505050905090565b60606000600161267084612adf565b01905060008167ffffffffffffffff81111561268f5761268e6136f5565b5b6040519080825280601f01601f1916602001820160405280156126c15781602001600182028036833780820191505090505b509050600082602001820190505b600115612724578080600190039150507f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a858161271857612717613e4a565b5b049450600085036126cf575b819350505050919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6127a584848484612c32565b60018111156127e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127e090614b60565b60405180910390fd5b6000829050600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16036128305761282b81612c38565b61286f565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161461286e5761286d8582612c81565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036128b1576128ac81612dee565b6128f0565b8473ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16146128ef576128ee8482612ebf565b5b5b5050505050565b50505050565b6129078383612f3e565b6129146000848484612958565b612953576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161294a90614ace565b60405180910390fd5b505050565b60006129798473ffffffffffffffffffffffffffffffffffffffff1661315b565b15612ad2578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026129a2611e56565b8786866040518563ffffffff1660e01b81526004016129c49493929190614bd5565b6020604051808303816000875af1925050508015612a0057506040513d601f19601f820116820180604052508101906129fd9190614c36565b60015b612a82573d8060008114612a30576040519150601f19603f3d011682016040523d82523d6000602084013e612a35565b606091505b506000815103612a7a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a7190614ace565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612ad7565b600190505b949350505050565b600080600090507a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310612b3d577a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008381612b3357612b32613e4a565b5b0492506040810190505b6d04ee2d6d415b85acef81000000008310612b7a576d04ee2d6d415b85acef81000000008381612b7057612b6f613e4a565b5b0492506020810190505b662386f26fc100008310612ba957662386f26fc100008381612b9f57612b9e613e4a565b5b0492506010810190505b6305f5e1008310612bd2576305f5e1008381612bc857612bc7613e4a565b5b0492506008810190505b6127108310612bf7576127108381612bed57612bec613e4a565b5b0492506004810190505b60648310612c1a5760648381612c1057612c0f613e4a565b5b0492506002810190505b600a8310612c29576001810190505b80915050919050565b50505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b60006001612c8e8461135e565b612c989190614c63565b9050600060076000848152602001908152602001600020549050818114612d7d576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b60006001600880549050612e029190614c63565b9050600060096000848152602001908152602001600020549050600060088381548110612e3257612e31613d62565b5b906000526020600020015490508060088381548110612e5457612e53613d62565b5b906000526020600020018190555081600960008381526020019081526020016000208190555060096000858152602001908152602001600020600090556008805480612ea357612ea2614c97565b5b6001900381819060005260206000200160009055905550505050565b6000612eca8361135e565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612fad576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fa490614d12565b60405180910390fd5b612fb68161258e565b15612ff6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fed90614d7e565b60405180910390fd5b613004600083836001612799565b61300d8161258e565b1561304d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161304490614d7e565b60405180910390fd5b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540192505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46131576000838360016128f7565b5050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b508054600082559060005260206000209081019061319c919061323f565b50565b82805482825590600052602060002090810192821561322e579160200282015b8281111561322d57823573ffffffffffffffffffffffffffffffffffffffff168260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550916020019190600101906131bf565b5b50905061323b919061323f565b5090565b5b80821115613258576000816000905550600101613240565b5090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6132a581613270565b81146132b057600080fd5b50565b6000813590506132c28161329c565b92915050565b6000602082840312156132de576132dd613266565b5b60006132ec848285016132b3565b91505092915050565b60008115159050919050565b61330a816132f5565b82525050565b60006020820190506133256000830184613301565b92915050565b613334816132f5565b811461333f57600080fd5b50565b6000813590506133518161332b565b92915050565b60006020828403121561336d5761336c613266565b5b600061337b84828501613342565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156133be5780820151818401526020810190506133a3565b60008484015250505050565b6000601f19601f8301169050919050565b60006133e682613384565b6133f0818561338f565b93506134008185602086016133a0565b613409816133ca565b840191505092915050565b6000602082019050818103600083015261342e81846133db565b905092915050565b6000819050919050565b61344981613436565b811461345457600080fd5b50565b60008135905061346681613440565b92915050565b60006020828403121561348257613481613266565b5b600061349084828501613457565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006134c482613499565b9050919050565b6134d4816134b9565b82525050565b60006020820190506134ef60008301846134cb565b92915050565b6134fe816134b9565b811461350957600080fd5b50565b60008135905061351b816134f5565b92915050565b6000806040838503121561353857613537613266565b5b60006135468582860161350c565b925050602061355785828601613457565b9150509250929050565b61356a81613436565b82525050565b60006020820190506135856000830184613561565b92915050565b6000602082840312156135a1576135a0613266565b5b60006135af8482850161350c565b91505092915050565b6000806000606084860312156135d1576135d0613266565b5b60006135df8682870161350c565b93505060206135f08682870161350c565b925050604061360186828701613457565b9150509250925092565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61364081613436565b82525050565b60006136528383613637565b60208301905092915050565b6000602082019050919050565b60006136768261360b565b6136808185613616565b935061368b83613627565b8060005b838110156136bc5781516136a38882613646565b97506136ae8361365e565b92505060018101905061368f565b5085935050505092915050565b600060208201905081810360008301526136e3818461366b565b905092915050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61372d826133ca565b810181811067ffffffffffffffff8211171561374c5761374b6136f5565b5b80604052505050565b600061375f61325c565b905061376b8282613724565b919050565b600067ffffffffffffffff82111561378b5761378a6136f5565b5b613794826133ca565b9050602081019050919050565b82818337600083830152505050565b60006137c36137be84613770565b613755565b9050828152602081018484840111156137df576137de6136f0565b5b6137ea8482856137a1565b509392505050565b600082601f830112613807576138066136eb565b5b81356138178482602086016137b0565b91505092915050565b60006020828403121561383657613835613266565b5b600082013567ffffffffffffffff8111156138545761385361326b565b5b613860848285016137f2565b91505092915050565b600080604083850312156138805761387f613266565b5b600061388e8582860161350c565b925050602061389f85828601613342565b9150509250929050565b600067ffffffffffffffff8211156138c4576138c36136f5565b5b6138cd826133ca565b9050602081019050919050565b60006138ed6138e8846138a9565b613755565b905082815260208101848484011115613909576139086136f0565b5b6139148482856137a1565b509392505050565b600082601f830112613931576139306136eb565b5b81356139418482602086016138da565b91505092915050565b6000806000806080858703121561396457613963613266565b5b60006139728782880161350c565b94505060206139838782880161350c565b935050604061399487828801613457565b925050606085013567ffffffffffffffff8111156139b5576139b461326b565b5b6139c18782880161391c565b91505092959194509250565b600080604083850312156139e4576139e3613266565b5b60006139f28582860161350c565b9250506020613a038582860161350c565b9150509250929050565b600080fd5b600080fd5b60008083601f840112613a2d57613a2c6136eb565b5b8235905067ffffffffffffffff811115613a4a57613a49613a0d565b5b602083019150836020820283011115613a6657613a65613a12565b5b9250929050565b60008060208385031215613a8457613a83613266565b5b600083013567ffffffffffffffff811115613aa257613aa161326b565b5b613aae85828601613a17565b92509250509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613b0157607f821691505b602082108103613b1457613b13613aba565b5b50919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b6000613b7660218361338f565b9150613b8182613b1a565b604082019050919050565b60006020820190508181036000830152613ba581613b69565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60008201527f6b656e206f776e6572206f7220617070726f76656420666f7220616c6c000000602082015250565b6000613c08603d8361338f565b9150613c1382613bac565b604082019050919050565b60006020820190508181036000830152613c3781613bfb565b9050919050565b7f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560008201527f72206f7220617070726f76656400000000000000000000000000000000000000602082015250565b6000613c9a602d8361338f565b9150613ca582613c3e565b604082019050919050565b60006020820190508181036000830152613cc981613c8d565b9050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b6000613d2c602b8361338f565b9150613d3782613cd0565b604082019050919050565b60006020820190508181036000830152613d5b81613d1f565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613dcb82613436565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613dfd57613dfc613d91565b5b600182019050919050565b6000613e1382613436565b9150613e1e83613436565b9250828202613e2c81613436565b91508282048414831517613e4357613e42613d91565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613e8482613436565b9150613e8f83613436565b925082613e9f57613e9e613e4a565b5b828204905092915050565b600081905092915050565b50565b6000613ec5600083613eaa565b9150613ed082613eb5565b600082019050919050565b6000613ee682613eb8565b9150819050919050565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b6000613f4c602c8361338f565b9150613f5782613ef0565b604082019050919050565b60006020820190508181036000830152613f7b81613f3f565b9050919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302613fe47fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82613fa7565b613fee8683613fa7565b95508019841693508086168417925050509392505050565b6000819050919050565b600061402b61402661402184613436565b614006565b613436565b9050919050565b6000819050919050565b61404583614010565b61405961405182614032565b848454613fb4565b825550505050565b600090565b61406e614061565b61407981848461403c565b505050565b5b8181101561409d57614092600082614066565b60018101905061407f565b5050565b601f8211156140e2576140b381613f82565b6140bc84613f97565b810160208510156140cb578190505b6140df6140d785613f97565b83018261407e565b50505b505050565b600082821c905092915050565b6000614105600019846008026140e7565b1980831691505092915050565b600061411e83836140f4565b9150826002028217905092915050565b61413782613384565b67ffffffffffffffff8111156141505761414f6136f5565b5b61415a8254613ae9565b6141658282856140a1565b600060209050601f8311600181146141985760008415614186578287015190505b6141908582614112565b8655506141f8565b601f1984166141a686613f82565b60005b828110156141ce578489015182556001820191506020850194506020810190506141a9565b868310156141eb57848901516141e7601f8916826140f4565b8355505b6001600288020188555050505b505050505050565b7f4552433732313a20696e76616c696420746f6b656e2049440000000000000000600082015250565b600061423660188361338f565b915061424182614200565b602082019050919050565b6000602082019050818103600083015261426581614229565b9050919050565b7f4552433732313a2061646472657373207a65726f206973206e6f74206120766160008201527f6c6964206f776e65720000000000000000000000000000000000000000000000602082015250565b60006142c860298361338f565b91506142d38261426c565b604082019050919050565b600060208201905081810360008301526142f7816142bb565b9050919050565b7f74686520636f6e74726163742069732070617573656400000000000000000000600082015250565b600061433460168361338f565b915061433f826142fe565b602082019050919050565b6000602082019050818103600083015261436381614327565b9050919050565b7f6e65656420746f206d696e74206174206c656173742031204e46540000000000600082015250565b60006143a0601b8361338f565b91506143ab8261436a565b602082019050919050565b600060208201905081810360008301526143cf81614393565b9050919050565b7f6d6178206d696e7420616d6f756e74207065722073657373696f6e206578636560008201527f6564656400000000000000000000000000000000000000000000000000000000602082015250565b600061443260248361338f565b915061443d826143d6565b604082019050919050565b6000602082019050818103600083015261446181614425565b9050919050565b600061447382613436565b915061447e83613436565b925082820190508082111561449657614495613d91565b5b92915050565b7f6d6178204e4654206c696d697420657863656564656400000000000000000000600082015250565b60006144d260168361338f565b91506144dd8261449c565b602082019050919050565b60006020820190508181036000830152614501816144c5565b9050919050565b7f75736572206973206e6f742077686974656c6973746564000000000000000000600082015250565b600061453e60178361338f565b915061454982614508565b602082019050919050565b6000602082019050818103600083015261456d81614531565b9050919050565b7f6d6178204e465420706572206164647265737320657863656564656400000000600082015250565b60006145aa601c8361338f565b91506145b582614574565b602082019050919050565b600060208201905081810360008301526145d98161459d565b9050919050565b7f696e73756666696369656e742066756e64730000000000000000000000000000600082015250565b600061461660128361338f565b9150614621826145e0565b602082019050919050565b6000602082019050818103600083015261464581614609565b9050919050565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b60006146a8602f8361338f565b91506146b38261464c565b604082019050919050565b600060208201905081810360008301526146d78161469b565b9050919050565b600081905092915050565b60006146f482613384565b6146fe81856146de565b935061470e8185602086016133a0565b80840191505092915050565b6000815461472781613ae9565b61473181866146de565b9450600182166000811461474c576001811461476157614794565b60ff1983168652811515820286019350614794565b61476a85613f82565b60005b8381101561478c5781548189015260018201915060208101905061476d565b838801955050505b50505092915050565b60006147a982866146e9565b91506147b582856146e9565b91506147c1828461471a565b9150819050949350505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061482a60268361338f565b9150614835826147ce565b604082019050919050565b600060208201905081810360008301526148598161481d565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061489660208361338f565b91506148a182614860565b602082019050919050565b600060208201905081810360008301526148c581614889565b9050919050565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b600061492860258361338f565b9150614933826148cc565b604082019050919050565b600060208201905081810360008301526149578161491b565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006149ba60248361338f565b91506149c58261495e565b604082019050919050565b600060208201905081810360008301526149e9816149ad565b9050919050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b6000614a2660198361338f565b9150614a31826149f0565b602082019050919050565b60006020820190508181036000830152614a5581614a19565b9050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b6000614ab860328361338f565b9150614ac382614a5c565b604082019050919050565b60006020820190508181036000830152614ae781614aab565b9050919050565b7f455243373231456e756d657261626c653a20636f6e736563757469766520747260008201527f616e7366657273206e6f7420737570706f727465640000000000000000000000602082015250565b6000614b4a60358361338f565b9150614b5582614aee565b604082019050919050565b60006020820190508181036000830152614b7981614b3d565b9050919050565b600081519050919050565b600082825260208201905092915050565b6000614ba782614b80565b614bb18185614b8b565b9350614bc18185602086016133a0565b614bca816133ca565b840191505092915050565b6000608082019050614bea60008301876134cb565b614bf760208301866134cb565b614c046040830185613561565b8181036060830152614c168184614b9c565b905095945050505050565b600081519050614c308161329c565b92915050565b600060208284031215614c4c57614c4b613266565b5b6000614c5a84828501614c21565b91505092915050565b6000614c6e82613436565b9150614c7983613436565b9250828203905081811115614c9157614c90613d91565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b6000614cfc60208361338f565b9150614d0782614cc6565b602082019050919050565b60006020820190508181036000830152614d2b81614cef565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b6000614d68601c8361338f565b9150614d7382614d32565b602082019050919050565b60006020820190508181036000830152614d9781614d5b565b905091905056fea2646970667358221220ec60b545f64f6e70306665580d16352b8cce31ef7c530b3ede52fd268ee7845d64736f6c63430008120033000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000