0x60806040523480156200001157600080fd5b506040518060400160405280600881526020017f47616d654974656d0000000000000000000000000000000000000000000000008152506040518060400160405280600381526020017f49544d000000000000000000000000000000000000000000000000000000000081525081600090816200008f919062000324565b508060019081620000a1919062000324565b5050506200040b565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200012c57607f821691505b602082108103620001425762000141620000e4565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620001ac7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826200016d565b620001b886836200016d565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000205620001ff620001f984620001d0565b620001da565b620001d0565b9050919050565b6000819050919050565b6200022183620001e4565b6200023962000230826200020c565b8484546200017a565b825550505050565b600090565b6200025062000241565b6200025d81848462000216565b505050565b5b8181101562000285576200027960008262000246565b60018101905062000263565b5050565b601f821115620002d4576200029e8162000148565b620002a9846200015d565b81016020851015620002b9578190505b620002d1620002c8856200015d565b83018262000262565b50505b505050565b600082821c905092915050565b6000620002f960001984600802620002d9565b1980831691505092915050565b6000620003148383620002e6565b9150826002028217905092915050565b6200032f82620000aa565b67ffffffffffffffff8111156200034b576200034a620000b5565b5b62000357825462000113565b6200036482828562000289565b600060209050601f8311600181146200039c576000841562000387578287015190505b62000393858262000306565b86555062000403565b601f198416620003ac8662000148565b60005b82811015620003d657848901518255600182019150602085019450602081019050620003af565b86831015620003f65784890151620003f2601f891682620002e6565b8355505b6001600288020188555050505b505050505050565b6125af806200041b6000396000f3fe608060405234801561001057600080fd5b50600436106100ea5760003560e01c806370a082311161008c578063b88d4fde11610066578063b88d4fde1461025b578063c87b56dd14610277578063cf378343146102a7578063e985e9c5146102d7576100ea565b806370a08231146101f157806395d89b4114610221578063a22cb4651461023f576100ea565b8063095ea7b3116100c8578063095ea7b31461016d57806323b872dd1461018957806342842e0e146101a55780636352211e146101c1576100ea565b806301ffc9a7146100ef57806306fdde031461011f578063081812fc1461013d575b600080fd5b610109600480360381019061010491906117ae565b610307565b60405161011691906117f6565b60405180910390f35b6101276103e9565b60405161013491906118a1565b60405180910390f35b610157600480360381019061015291906118f9565b61047b565b6040516101649190611967565b60405180910390f35b610187600480360381019061018291906119ae565b6104c1565b005b6101a3600480360381019061019e91906119ee565b6105d8565b005b6101bf60048036038101906101ba91906119ee565b610638565b005b6101db60048036038101906101d691906118f9565b610658565b6040516101e89190611967565b60405180910390f35b61020b60048036038101906102069190611a41565b6106de565b6040516102189190611a7d565b60405180910390f35b610229610795565b60405161023691906118a1565b60405180910390f35b61025960048036038101906102549190611ac4565b610827565b005b61027560048036038101906102709190611c39565b61083d565b005b610291600480360381019061028c91906118f9565b61089f565b60405161029e91906118a1565b60405180910390f35b6102c160048036038101906102bc9190611d5d565b610907565b6040516102ce9190611a7d565b60405180910390f35b6102f160048036038101906102ec9190611db9565b610935565b6040516102fe91906117f6565b60405180910390f35b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806103d257507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806103e257506103e1826109c9565b5b9050919050565b6060600080546103f890611e28565b80601f016020809104026020016040519081016040528092919081815260200182805461042490611e28565b80156104715780601f1061044657610100808354040283529160200191610471565b820191906000526020600020905b81548152906001019060200180831161045457829003601f168201915b5050505050905090565b600061048682610a33565b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006104cc82610658565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361053c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161053390611ecb565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1661055b610a7e565b73ffffffffffffffffffffffffffffffffffffffff16148061058a575061058981610584610a7e565b610935565b5b6105c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105c090611f5d565b60405180910390fd5b6105d38383610a86565b505050565b6105e96105e3610a7e565b82610b3f565b610628576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161061f90611fef565b60405180910390fd5b610633838383610bd4565b505050565b6106538383836040518060200160405280600081525061083d565b505050565b60008061066483610ecd565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036106d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106cc9061205b565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361074e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610745906120ed565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6060600180546107a490611e28565b80601f01602080910402602001604051908101604052809291908181526020018280546107d090611e28565b801561081d5780601f106107f25761010080835404028352916020019161081d565b820191906000526020600020905b81548152906001019060200180831161080057829003601f168201915b5050505050905090565b610839610832610a7e565b8383610f0a565b5050565b61084e610848610a7e565b83610b3f565b61088d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161088490611fef565b60405180910390fd5b61089984848484611076565b50505050565b60606108aa82610a33565b60006108b46110d2565b905060008151116108d457604051806020016040528060008152506108ff565b806108de846110e9565b6040516020016108ef929190612149565b6040516020818303038152906040525b915050919050565b600061091360066111b7565b600061091f60066111cd565b905061092b84826111db565b8091505092915050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b610a3c816113f8565b610a7b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a729061205b565b60405180910390fd5b50565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16610af983610658565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600080610b4b83610658565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480610b8d5750610b8c8185610935565b5b80610bcb57508373ffffffffffffffffffffffffffffffffffffffff16610bb38461047b565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16610bf482610658565b73ffffffffffffffffffffffffffffffffffffffff1614610c4a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c41906121df565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610cb9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cb090612271565b60405180910390fd5b610cc68383836001611439565b8273ffffffffffffffffffffffffffffffffffffffff16610ce682610658565b73ffffffffffffffffffffffffffffffffffffffff1614610d3c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d33906121df565b60405180910390fd5b6004600082815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540192505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4610ec8838383600161143f565b505050565b60006002600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610f78576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f6f906122dd565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161106991906117f6565b60405180910390a3505050565b611081848484610bd4565b61108d84848484611445565b6110cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110c39061236f565b60405180910390fd5b50505050565b606060405180602001604052806000815250905090565b6060600060016110f8846115cc565b01905060008167ffffffffffffffff81111561111757611116611b0e565b5b6040519080825280601f01601f1916602001820160405280156111495781602001600182028036833780820191505090505b509050600082602001820190505b6001156111ac578080600190039150507f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a85816111a05761119f61238f565b5b04945060008503611157575b819350505050919050565b6001816000016000828254019250508190555050565b600081600001549050919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361124a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112419061240a565b60405180910390fd5b611253816113f8565b15611293576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161128a90612476565b60405180910390fd5b6112a1600083836001611439565b6112aa816113f8565b156112ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112e190612476565b60405180910390fd5b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540192505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46113f460008383600161143f565b5050565b60008073ffffffffffffffffffffffffffffffffffffffff1661141a83610ecd565b73ffffffffffffffffffffffffffffffffffffffff1614159050919050565b50505050565b50505050565b60006114668473ffffffffffffffffffffffffffffffffffffffff1661171f565b156115bf578373ffffffffffffffffffffffffffffffffffffffff1663150b7a0261148f610a7e565b8786866040518563ffffffff1660e01b81526004016114b194939291906124eb565b6020604051808303816000875af19250505080156114ed57506040513d601f19601f820116820180604052508101906114ea919061254c565b60015b61156f573d806000811461151d576040519150601f19603f3d011682016040523d82523d6000602084013e611522565b606091505b506000815103611567576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161155e9061236f565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506115c4565b600190505b949350505050565b600080600090507a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000831061162a577a184f03e93ff9f4daa797ed6e38ed64bf6a1f01000000000000000083816116205761161f61238f565b5b0492506040810190505b6d04ee2d6d415b85acef81000000008310611667576d04ee2d6d415b85acef8100000000838161165d5761165c61238f565b5b0492506020810190505b662386f26fc10000831061169657662386f26fc10000838161168c5761168b61238f565b5b0492506010810190505b6305f5e10083106116bf576305f5e10083816116b5576116b461238f565b5b0492506008810190505b61271083106116e45761271083816116da576116d961238f565b5b0492506004810190505b6064831061170757606483816116fd576116fc61238f565b5b0492506002810190505b600a8310611716576001810190505b80915050919050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b61178b81611756565b811461179657600080fd5b50565b6000813590506117a881611782565b92915050565b6000602082840312156117c4576117c361174c565b5b60006117d284828501611799565b91505092915050565b60008115159050919050565b6117f0816117db565b82525050565b600060208201905061180b60008301846117e7565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561184b578082015181840152602081019050611830565b60008484015250505050565b6000601f19601f8301169050919050565b600061187382611811565b61187d818561181c565b935061188d81856020860161182d565b61189681611857565b840191505092915050565b600060208201905081810360008301526118bb8184611868565b905092915050565b6000819050919050565b6118d6816118c3565b81146118e157600080fd5b50565b6000813590506118f3816118cd565b92915050565b60006020828403121561190f5761190e61174c565b5b600061191d848285016118e4565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061195182611926565b9050919050565b61196181611946565b82525050565b600060208201905061197c6000830184611958565b92915050565b61198b81611946565b811461199657600080fd5b50565b6000813590506119a881611982565b92915050565b600080604083850312156119c5576119c461174c565b5b60006119d385828601611999565b92505060206119e4858286016118e4565b9150509250929050565b600080600060608486031215611a0757611a0661174c565b5b6000611a1586828701611999565b9350506020611a2686828701611999565b9250506040611a37868287016118e4565b9150509250925092565b600060208284031215611a5757611a5661174c565b5b6000611a6584828501611999565b91505092915050565b611a77816118c3565b82525050565b6000602082019050611a926000830184611a6e565b92915050565b611aa1816117db565b8114611aac57600080fd5b50565b600081359050611abe81611a98565b92915050565b60008060408385031215611adb57611ada61174c565b5b6000611ae985828601611999565b9250506020611afa85828601611aaf565b9150509250929050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b611b4682611857565b810181811067ffffffffffffffff82111715611b6557611b64611b0e565b5b80604052505050565b6000611b78611742565b9050611b848282611b3d565b919050565b600067ffffffffffffffff821115611ba457611ba3611b0e565b5b611bad82611857565b9050602081019050919050565b82818337600083830152505050565b6000611bdc611bd784611b89565b611b6e565b905082815260208101848484011115611bf857611bf7611b09565b5b611c03848285611bba565b509392505050565b600082601f830112611c2057611c1f611b04565b5b8135611c30848260208601611bc9565b91505092915050565b60008060008060808587031215611c5357611c5261174c565b5b6000611c6187828801611999565b9450506020611c7287828801611999565b9350506040611c83878288016118e4565b925050606085013567ffffffffffffffff811115611ca457611ca3611751565b5b611cb087828801611c0b565b91505092959194509250565b600067ffffffffffffffff821115611cd757611cd6611b0e565b5b611ce082611857565b9050602081019050919050565b6000611d00611cfb84611cbc565b611b6e565b905082815260208101848484011115611d1c57611d1b611b09565b5b611d27848285611bba565b509392505050565b600082601f830112611d4457611d43611b04565b5b8135611d54848260208601611ced565b91505092915050565b60008060408385031215611d7457611d7361174c565b5b6000611d8285828601611999565b925050602083013567ffffffffffffffff811115611da357611da2611751565b5b611daf85828601611d2f565b9150509250929050565b60008060408385031215611dd057611dcf61174c565b5b6000611dde85828601611999565b9250506020611def85828601611999565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680611e4057607f821691505b602082108103611e5357611e52611df9565b5b50919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b6000611eb560218361181c565b9150611ec082611e59565b604082019050919050565b60006020820190508181036000830152611ee481611ea8565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60008201527f6b656e206f776e6572206f7220617070726f76656420666f7220616c6c000000602082015250565b6000611f47603d8361181c565b9150611f5282611eeb565b604082019050919050565b60006020820190508181036000830152611f7681611f3a565b9050919050565b7f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560008201527f72206f7220617070726f76656400000000000000000000000000000000000000602082015250565b6000611fd9602d8361181c565b9150611fe482611f7d565b604082019050919050565b6000602082019050818103600083015261200881611fcc565b9050919050565b7f4552433732313a20696e76616c696420746f6b656e2049440000000000000000600082015250565b600061204560188361181c565b91506120508261200f565b602082019050919050565b6000602082019050818103600083015261207481612038565b9050919050565b7f4552433732313a2061646472657373207a65726f206973206e6f74206120766160008201527f6c6964206f776e65720000000000000000000000000000000000000000000000602082015250565b60006120d760298361181c565b91506120e28261207b565b604082019050919050565b60006020820190508181036000830152612106816120ca565b9050919050565b600081905092915050565b600061212382611811565b61212d818561210d565b935061213d81856020860161182d565b80840191505092915050565b60006121558285612118565b91506121618284612118565b91508190509392505050565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b60006121c960258361181c565b91506121d48261216d565b604082019050919050565b600060208201905081810360008301526121f8816121bc565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061225b60248361181c565b9150612266826121ff565b604082019050919050565b6000602082019050818103600083015261228a8161224e565b9050919050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b60006122c760198361181c565b91506122d282612291565b602082019050919050565b600060208201905081810360008301526122f6816122ba565b9050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b600061235960328361181c565b9150612364826122fd565b604082019050919050565b600060208201905081810360008301526123888161234c565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b60006123f460208361181c565b91506123ff826123be565b602082019050919050565b60006020820190508181036000830152612423816123e7565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b6000612460601c8361181c565b915061246b8261242a565b602082019050919050565b6000602082019050818103600083015261248f81612453565b9050919050565b600081519050919050565b600082825260208201905092915050565b60006124bd82612496565b6124c781856124a1565b93506124d781856020860161182d565b6124e081611857565b840191505092915050565b60006080820190506125006000830187611958565b61250d6020830186611958565b61251a6040830185611a6e565b818103606083015261252c81846124b2565b905095945050505050565b60008151905061254681611782565b92915050565b6000602082840312156125625761256161174c565b5b600061257084828501612537565b9150509291505056fea2646970667358221220cd6d81b58b970d3e0fe33fc3f443a93359c41b5fe7731454de0750efe511142f64736f6c63430008120033