Merge pull request #32781 from lukaszo/ready_ds

Automatic merge from submit-queue

Add ReadyScheduled to DaemonSet status

Fixes #25605

cc @bgrant0607 @mikedanese
pull/6/head
Kubernetes Submit Queue 2016-10-13 00:25:56 -07:00 committed by GitHub
commit 523fce990a
21 changed files with 11539 additions and 11317 deletions

View File

@ -29489,7 +29489,8 @@
"required": [ "required": [
"currentNumberScheduled", "currentNumberScheduled",
"numberMisscheduled", "numberMisscheduled",
"desiredNumberScheduled" "desiredNumberScheduled",
"numberReady"
], ],
"properties": { "properties": {
"currentNumberScheduled": { "currentNumberScheduled": {
@ -29506,6 +29507,11 @@
"description": "NumberMisscheduled is the number of nodes that are running the daemon pod, but are not supposed to run the daemon pod. More info: http://releases.k8s.io/HEAD/docs/admin/daemons.md", "description": "NumberMisscheduled is the number of nodes that are running the daemon pod, but are not supposed to run the daemon pod. More info: http://releases.k8s.io/HEAD/docs/admin/daemons.md",
"type": "integer", "type": "integer",
"format": "int32" "format": "int32"
},
"numberReady": {
"description": "NumberReady is the number of nodes that should be running the daemon pod and have one or more of the daemon pod running and ready.",
"type": "integer",
"format": "int32"
} }
} }
}, },

View File

@ -7144,7 +7144,8 @@
"required": [ "required": [
"currentNumberScheduled", "currentNumberScheduled",
"numberMisscheduled", "numberMisscheduled",
"desiredNumberScheduled" "desiredNumberScheduled",
"numberReady"
], ],
"properties": { "properties": {
"currentNumberScheduled": { "currentNumberScheduled": {
@ -7161,6 +7162,11 @@
"description": "NumberMisscheduled is the number of nodes that are running the daemon pod, but are not supposed to run the daemon pod. More info: http://releases.k8s.io/HEAD/docs/admin/daemons.md", "description": "NumberMisscheduled is the number of nodes that are running the daemon pod, but are not supposed to run the daemon pod. More info: http://releases.k8s.io/HEAD/docs/admin/daemons.md",
"type": "integer", "type": "integer",
"format": "int32" "format": "int32"
},
"numberReady": {
"description": "NumberReady is the number of nodes that should be running the daemon pod and have one or more of the daemon pod running and ready.",
"type": "integer",
"format": "int32"
} }
} }
}, },

View File

@ -9185,7 +9185,8 @@
"required": [ "required": [
"currentNumberScheduled", "currentNumberScheduled",
"numberMisscheduled", "numberMisscheduled",
"desiredNumberScheduled" "desiredNumberScheduled",
"numberReady"
], ],
"properties": { "properties": {
"currentNumberScheduled": { "currentNumberScheduled": {
@ -9202,6 +9203,11 @@
"type": "integer", "type": "integer",
"format": "int32", "format": "int32",
"description": "DesiredNumberScheduled is the total number of nodes that should be running the daemon pod (including nodes correctly running the daemon pod). More info: http://releases.k8s.io/HEAD/docs/admin/daemons.md" "description": "DesiredNumberScheduled is the total number of nodes that should be running the daemon pod (including nodes correctly running the daemon pod). More info: http://releases.k8s.io/HEAD/docs/admin/daemons.md"
},
"numberReady": {
"type": "integer",
"format": "int32",
"description": "NumberReady is the number of nodes that should be running the daemon pod and have one or more of the daemon pod running and ready."
} }
} }
}, },

View File

@ -536,6 +536,13 @@ span.icon > [class^="icon-"], span.icon > [class*=" icon-"] { cursor: default; }
<td class="tableblock halign-left valign-top"><p class="tableblock">integer (int32)</p></td> <td class="tableblock halign-left valign-top"><p class="tableblock">integer (int32)</p></td>
<td class="tableblock halign-left valign-top"></td> <td class="tableblock halign-left valign-top"></td>
</tr> </tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">numberReady</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">NumberReady is the number of nodes that should be running the daemon pod and have one or more of the daemon pod running and ready.</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">true</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">integer (int32)</p></td>
<td class="tableblock halign-left valign-top"></td>
</tr>
</tbody> </tbody>
</table> </table>
@ -6687,7 +6694,7 @@ Both these may change in the future. Incoming requests are matched against the h
</div> </div>
<div id="footer"> <div id="footer">
<div id="footer-text"> <div id="footer-text">
Last updated 2016-10-07 14:07:17 UTC Last updated 2016-10-12 13:31:06 UTC
</div> </div>
</div> </div>
</body> </body>

File diff suppressed because it is too large Load Diff

View File

@ -385,6 +385,10 @@ type DaemonSetStatus struct {
// DesiredNumberScheduled is the total number of nodes that should be running the daemon // DesiredNumberScheduled is the total number of nodes that should be running the daemon
// pod (including nodes correctly running the daemon pod). // pod (including nodes correctly running the daemon pod).
DesiredNumberScheduled int32 `json:"desiredNumberScheduled"` DesiredNumberScheduled int32 `json:"desiredNumberScheduled"`
// NumberReady is the number of nodes that should be running the daemon pod and have one
// or more of the daemon pod running and ready.
NumberReady int32 `json:"numberReady"`
} }
// +genclient=true // +genclient=true

View File

@ -797,6 +797,9 @@ func (m *DaemonSetStatus) MarshalTo(data []byte) (int, error) {
data[i] = 0x18 data[i] = 0x18
i++ i++
i = encodeVarintGenerated(data, i, uint64(m.DesiredNumberScheduled)) i = encodeVarintGenerated(data, i, uint64(m.DesiredNumberScheduled))
data[i] = 0x20
i++
i = encodeVarintGenerated(data, i, uint64(m.NumberReady))
return i, nil return i, nil
} }
@ -3305,6 +3308,7 @@ func (m *DaemonSetStatus) Size() (n int) {
n += 1 + sovGenerated(uint64(m.CurrentNumberScheduled)) n += 1 + sovGenerated(uint64(m.CurrentNumberScheduled))
n += 1 + sovGenerated(uint64(m.NumberMisscheduled)) n += 1 + sovGenerated(uint64(m.NumberMisscheduled))
n += 1 + sovGenerated(uint64(m.DesiredNumberScheduled)) n += 1 + sovGenerated(uint64(m.DesiredNumberScheduled))
n += 1 + sovGenerated(uint64(m.NumberReady))
return n return n
} }
@ -4272,6 +4276,7 @@ func (this *DaemonSetStatus) String() string {
`CurrentNumberScheduled:` + fmt.Sprintf("%v", this.CurrentNumberScheduled) + `,`, `CurrentNumberScheduled:` + fmt.Sprintf("%v", this.CurrentNumberScheduled) + `,`,
`NumberMisscheduled:` + fmt.Sprintf("%v", this.NumberMisscheduled) + `,`, `NumberMisscheduled:` + fmt.Sprintf("%v", this.NumberMisscheduled) + `,`,
`DesiredNumberScheduled:` + fmt.Sprintf("%v", this.DesiredNumberScheduled) + `,`, `DesiredNumberScheduled:` + fmt.Sprintf("%v", this.DesiredNumberScheduled) + `,`,
`NumberReady:` + fmt.Sprintf("%v", this.NumberReady) + `,`,
`}`, `}`,
}, "") }, "")
return s return s
@ -5995,6 +6000,25 @@ func (m *DaemonSetStatus) Unmarshal(data []byte) error {
break break
} }
} }
case 4:
if wireType != 0 {
return fmt.Errorf("proto: wrong wireType = %d for field NumberReady", wireType)
}
m.NumberReady = 0
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return ErrIntOverflowGenerated
}
if iNdEx >= l {
return io.ErrUnexpectedEOF
}
b := data[iNdEx]
iNdEx++
m.NumberReady |= (int32(b) & 0x7F) << shift
if b < 0x80 {
break
}
}
default: default:
iNdEx = preIndex iNdEx = preIndex
skippy, err := skipGenerated(data[iNdEx:]) skippy, err := skipGenerated(data[iNdEx:])
@ -14064,249 +14088,250 @@ var (
) )
var fileDescriptorGenerated = []byte{ var fileDescriptorGenerated = []byte{
// 3893 bytes of a gzipped FileDescriptorProto // 3916 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0xec, 0x5b, 0xdb, 0x8f, 0x1c, 0x47, 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0xec, 0x5b, 0x5b, 0x8f, 0x1c, 0xc7,
0xd5, 0x4f, 0xcf, 0xec, 0x65, 0xa6, 0xf6, 0xe2, 0x75, 0x79, 0x6d, 0x4f, 0x36, 0x89, 0x9d, 0x74, 0x75, 0xd6, 0xcc, 0xec, 0x65, 0xa6, 0xf6, 0xc2, 0x65, 0x71, 0x49, 0x8e, 0x56, 0x12, 0x29, 0xb5,
0xf4, 0xe5, 0xa2, 0x2f, 0x9e, 0xfd, 0xec, 0x2f, 0x09, 0x8e, 0x93, 0x38, 0xd9, 0xd9, 0x8b, 0xed, 0x10, 0x5d, 0x10, 0x71, 0x36, 0x64, 0x24, 0x85, 0xa2, 0x24, 0x4a, 0x3b, 0x7b, 0x21, 0x29, 0xed,
0x64, 0xd7, 0x9e, 0xd4, 0xac, 0x9d, 0x90, 0x2b, 0xbd, 0x33, 0xb5, 0xb3, 0xed, 0xed, 0x99, 0x9e, 0x92, 0xa3, 0x9a, 0x25, 0xa5, 0xe8, 0x9a, 0xde, 0x99, 0xda, 0xd9, 0xe6, 0xf6, 0x4c, 0x8f, 0xfa,
0xf4, 0x65, 0xb3, 0x13, 0x84, 0x08, 0x02, 0x24, 0x5e, 0x12, 0xf2, 0x46, 0x24, 0xe0, 0x01, 0x09, 0xb2, 0xda, 0x55, 0x10, 0x44, 0x41, 0x12, 0x20, 0x2f, 0x51, 0xf4, 0x16, 0x01, 0x89, 0x1f, 0x0c,
0xc4, 0x13, 0x11, 0x48, 0x48, 0x79, 0xe0, 0x05, 0x22, 0x21, 0xcc, 0x03, 0x22, 0x20, 0x10, 0x3c, 0xd8, 0xf0, 0x93, 0x05, 0x1b, 0x30, 0xa0, 0x07, 0xbf, 0xd8, 0x82, 0x0d, 0xd3, 0x0f, 0x86, 0x65,
0x40, 0x12, 0x82, 0x20, 0xe2, 0x5f, 0x08, 0x3c, 0x70, 0xaa, 0xba, 0xfa, 0x52, 0x3d, 0xdd, 0x63, 0xc3, 0x86, 0xfd, 0x60, 0x4b, 0xb2, 0x0c, 0x5b, 0xf0, 0x5f, 0x90, 0xfd, 0xe0, 0x53, 0x97, 0xbe,
0xf7, 0xec, 0x45, 0x20, 0x78, 0x58, 0xd9, 0x5d, 0x75, 0xce, 0xef, 0x9c, 0x3a, 0x75, 0xea, 0xd4, 0x54, 0x4f, 0xf7, 0x90, 0x3d, 0x7b, 0x81, 0x0d, 0xfb, 0x61, 0x41, 0x76, 0xd5, 0x39, 0xdf, 0x39,
0xa9, 0xaa, 0x33, 0xe8, 0xd1, 0xcd, 0xd3, 0x76, 0x59, 0x37, 0x67, 0x37, 0xdd, 0x35, 0x6a, 0xb5, 0x75, 0xea, 0xd4, 0xa9, 0x53, 0x55, 0x67, 0xd0, 0x93, 0x9b, 0x67, 0x9d, 0x8a, 0x61, 0xcd, 0x6e,
0xa9, 0x43, 0xed, 0xd9, 0xce, 0x66, 0x73, 0x56, 0xeb, 0xe8, 0xf6, 0x2c, 0xdd, 0x76, 0x68, 0xdb, 0x7a, 0x6b, 0xd4, 0xee, 0x50, 0x97, 0x3a, 0xb3, 0xdd, 0xcd, 0xd6, 0xac, 0xde, 0x35, 0x9c, 0x59,
0xd6, 0xcd, 0xb6, 0x3d, 0xbb, 0x75, 0x72, 0x8d, 0x3a, 0xda, 0xc9, 0xd9, 0x26, 0x6d, 0x53, 0x4b, 0xba, 0xed, 0xd2, 0x8e, 0x63, 0x58, 0x1d, 0x67, 0x76, 0xeb, 0xf4, 0x1a, 0x75, 0xf5, 0xd3, 0xb3,
0x73, 0x68, 0xa3, 0xdc, 0xb1, 0x4c, 0xc7, 0xc4, 0x27, 0x3c, 0xf6, 0x72, 0xc8, 0x5e, 0x06, 0xf6, 0x2d, 0xda, 0xa1, 0xb6, 0xee, 0xd2, 0x66, 0xa5, 0x6b, 0x5b, 0xae, 0x85, 0x4f, 0x09, 0xf6, 0x4a,
0x32, 0x63, 0x2f, 0x87, 0xec, 0x65, 0xc1, 0x3e, 0x73, 0xa2, 0xa9, 0x3b, 0x1b, 0xee, 0x5a, 0xb9, 0xc8, 0x5e, 0x01, 0xf6, 0x0a, 0x63, 0xaf, 0x84, 0xec, 0x15, 0xc9, 0x3e, 0x73, 0xaa, 0x65, 0xb8,
0x6e, 0xb6, 0x66, 0x9b, 0x66, 0xd3, 0x9c, 0xe5, 0x28, 0x6b, 0xee, 0x3a, 0xff, 0xe2, 0x1f, 0xfc, 0x1b, 0xde, 0x5a, 0xa5, 0x61, 0xb5, 0x67, 0x5b, 0x56, 0xcb, 0x9a, 0xe5, 0x28, 0x6b, 0xde, 0x3a,
0x7f, 0x1e, 0xfa, 0xcc, 0xa9, 0x54, 0xe5, 0x66, 0x2d, 0x6a, 0x9b, 0xae, 0x55, 0xa7, 0x71, 0x8d, 0xff, 0xe2, 0x1f, 0xfc, 0x7f, 0x02, 0x7d, 0xe6, 0x4c, 0xaa, 0x72, 0xb3, 0x36, 0x75, 0x2c, 0xcf,
0x66, 0x1e, 0x48, 0xe7, 0x71, 0xdb, 0x5b, 0xd4, 0x62, 0x0a, 0xd1, 0x46, 0x0f, 0xdb, 0x7d, 0xe9, 0x6e, 0xd0, 0xb8, 0x46, 0x33, 0x8f, 0xa4, 0xf3, 0x78, 0x9d, 0x2d, 0x6a, 0x33, 0x85, 0x68, 0xb3,
0x6c, 0x5b, 0x3d, 0xc3, 0x9e, 0x39, 0x91, 0x4c, 0x6d, 0xb9, 0x6d, 0x47, 0x6f, 0xf5, 0xea, 0x74, 0x87, 0xed, 0xa1, 0x74, 0xb6, 0xad, 0x9e, 0x61, 0xcf, 0x9c, 0x4a, 0xa6, 0xb6, 0xbd, 0x8e, 0x6b,
0x32, 0x99, 0xdc, 0x75, 0x74, 0x63, 0x56, 0x6f, 0x3b, 0xb6, 0x63, 0xc5, 0x59, 0xd4, 0x32, 0x42, 0xb4, 0x7b, 0x75, 0x3a, 0x9d, 0x4c, 0xee, 0xb9, 0x86, 0x39, 0x6b, 0x74, 0x5c, 0xc7, 0xb5, 0xe3,
0x73, 0xd5, 0x0b, 0x57, 0x3c, 0x7d, 0xf1, 0xed, 0x68, 0xa8, 0xad, 0xb5, 0x68, 0x49, 0xb9, 0x5d, 0x2c, 0x5a, 0x05, 0xa1, 0xb9, 0xda, 0xa5, 0x6b, 0x42, 0x5f, 0x7c, 0x37, 0x1a, 0xea, 0xe8, 0x6d,
0xb9, 0xa7, 0x58, 0x19, 0xbf, 0xf6, 0xfe, 0xf1, 0x9b, 0x3e, 0x7a, 0xff, 0xf8, 0xd0, 0x45, 0x68, 0x5a, 0xce, 0xdd, 0x9d, 0x7b, 0xa0, 0x54, 0x1d, 0xbf, 0xf1, 0xd1, 0xc9, 0xdb, 0x3e, 0xfd, 0xe8,
0x23, 0xbc, 0x47, 0x7d, 0x1e, 0x4d, 0xcf, 0x57, 0x2f, 0xaf, 0x6a, 0x56, 0x93, 0x3a, 0x97, 0x01, 0xe4, 0xd0, 0x65, 0x68, 0x23, 0xbc, 0x47, 0x7b, 0x19, 0x4d, 0xcf, 0xd7, 0xae, 0xae, 0xea, 0x76,
0x57, 0x7f, 0x55, 0x73, 0x18, 0xe7, 0x02, 0x9a, 0x72, 0x78, 0x63, 0x95, 0x82, 0xb5, 0xda, 0x8e, 0x8b, 0xba, 0x57, 0x01, 0xd7, 0x78, 0x53, 0x77, 0x19, 0xe7, 0x02, 0x9a, 0x72, 0x79, 0x63, 0x8d,
0xd6, 0xf4, 0x50, 0x86, 0x2b, 0x25, 0x81, 0x32, 0xb5, 0x1a, 0xeb, 0x27, 0x3d, 0x1c, 0xea, 0xd7, 0x82, 0xb5, 0x3a, 0xae, 0xde, 0x12, 0x28, 0xc3, 0xd5, 0xb2, 0x44, 0x99, 0x5a, 0x8d, 0xf5, 0x93,
0x14, 0x74, 0xf3, 0xbc, 0x6b, 0x3b, 0x66, 0x6b, 0x85, 0x3a, 0x96, 0x5e, 0x9f, 0x77, 0x2d, 0x0b, 0x1e, 0x0e, 0xed, 0x7f, 0x73, 0xe8, 0xf6, 0x79, 0xcf, 0x71, 0xad, 0xf6, 0x0a, 0x75, 0x6d, 0xa3,
0xba, 0x6a, 0x8e, 0xe6, 0xb8, 0xf6, 0xf5, 0xb5, 0xc3, 0xcf, 0xa0, 0xe1, 0x2d, 0xcd, 0x70, 0x69, 0x31, 0xef, 0xd9, 0x36, 0x74, 0xd5, 0x5d, 0xdd, 0xf5, 0x9c, 0x9b, 0x6b, 0x87, 0x5f, 0x40, 0xc3,
0x29, 0x07, 0x24, 0x63, 0xa7, 0xee, 0x2b, 0xa7, 0xba, 0x4d, 0xd9, 0x9f, 0xd8, 0xf2, 0x53, 0xae, 0x5b, 0xba, 0xe9, 0xd1, 0x72, 0x1e, 0x48, 0xc6, 0xce, 0x3c, 0x54, 0x49, 0x75, 0x9b, 0x8a, 0x3f,
0x06, 0xd6, 0x74, 0xba, 0x95, 0x69, 0x01, 0x38, 0x2e, 0xa4, 0x5e, 0x61, 0x48, 0xc4, 0x03, 0x54, 0xb1, 0x95, 0xe7, 0x3c, 0x1d, 0xac, 0xe9, 0xee, 0x54, 0xa7, 0x25, 0xe0, 0xb8, 0x94, 0x7a, 0x8d,
0xdf, 0x50, 0xd0, 0x6d, 0xa9, 0x9a, 0x2d, 0xeb, 0xb6, 0x83, 0x5b, 0x68, 0x58, 0x77, 0x68, 0xcb, 0x21, 0x11, 0x01, 0xa8, 0xbd, 0x9d, 0x43, 0x77, 0xa5, 0x6a, 0xb6, 0x6c, 0x38, 0x2e, 0x6e, 0xa3,
0x06, 0xf5, 0xf2, 0x20, 0xfb, 0x7c, 0x39, 0x93, 0xcb, 0x96, 0x53, 0xc1, 0x2b, 0x13, 0x42, 0xaf, 0x61, 0xc3, 0xa5, 0x6d, 0x07, 0xd4, 0x2b, 0x80, 0xec, 0x8b, 0x95, 0x4c, 0x2e, 0x5b, 0x49, 0x05,
0xe1, 0x0b, 0x0c, 0x9e, 0x78, 0x52, 0xd4, 0xaf, 0x2a, 0x08, 0x47, 0x79, 0x3c, 0xeb, 0xde, 0x80, 0xaf, 0x4e, 0x48, 0xbd, 0x86, 0x2f, 0x31, 0x78, 0x22, 0xa4, 0x68, 0xff, 0x93, 0x43, 0x38, 0xca,
0x8d, 0x9e, 0xde, 0x89, 0x8d, 0x0e, 0x09, 0xc0, 0x31, 0x4f, 0x9c, 0x64, 0xa2, 0xd7, 0x14, 0x74, 0x23, 0xac, 0x7b, 0x0b, 0x36, 0x7a, 0x7e, 0x37, 0x36, 0x3a, 0x22, 0x01, 0xc7, 0x84, 0x38, 0xc5,
0xa4, 0x57, 0x23, 0x6e, 0x9b, 0x75, 0xd9, 0x36, 0x73, 0x3b, 0xb0, 0x8d, 0x87, 0x9a, 0x62, 0x94, 0x44, 0x6f, 0xe5, 0xd0, 0xb1, 0x5e, 0x8d, 0xb8, 0x6d, 0xd6, 0x55, 0xdb, 0xcc, 0xed, 0xc2, 0x36,
0xef, 0xe5, 0x50, 0x71, 0x41, 0xa3, 0x2d, 0xb3, 0x5d, 0x03, 0x5b, 0x3c, 0x83, 0x0a, 0x2d, 0xe0, 0x02, 0x35, 0xc5, 0x28, 0x5f, 0xcd, 0xa3, 0xd2, 0x82, 0x4e, 0xdb, 0x56, 0xa7, 0x0e, 0xb6, 0x78,
0x6f, 0x68, 0x8e, 0xc6, 0xed, 0x31, 0x76, 0xea, 0x9e, 0x3e, 0x83, 0xdd, 0x3a, 0x59, 0xbe, 0xb4, 0x01, 0x15, 0xdb, 0xc0, 0xdf, 0xd4, 0x5d, 0x9d, 0xdb, 0x63, 0xec, 0xcc, 0x03, 0x7d, 0x06, 0xbb,
0x76, 0x95, 0xd6, 0x1d, 0x90, 0xa3, 0x55, 0xb0, 0xc0, 0x47, 0x61, 0x1b, 0x09, 0xd0, 0xf0, 0x8b, 0x75, 0xba, 0x72, 0x65, 0xed, 0x3a, 0x6d, 0xb8, 0x20, 0x47, 0xaf, 0x62, 0x89, 0x8f, 0xc2, 0x36,
0x68, 0xc8, 0xee, 0xd0, 0xba, 0x30, 0xe1, 0x23, 0x19, 0x87, 0x13, 0x68, 0x58, 0x03, 0x8c, 0x70, 0x12, 0xa0, 0xe1, 0x57, 0xd1, 0x90, 0xd3, 0xa5, 0x0d, 0x69, 0xc2, 0x27, 0x32, 0x0e, 0x27, 0xd0,
0x8e, 0xd8, 0x17, 0xe1, 0xb8, 0x60, 0xaf, 0x11, 0x9b, 0x4f, 0x7e, 0x29, 0xcf, 0x25, 0x9c, 0x1d, 0xb0, 0x0e, 0x18, 0xe1, 0x1c, 0xb1, 0x2f, 0xc2, 0x71, 0xc1, 0x5e, 0x23, 0x0e, 0x9f, 0xfc, 0x72,
0x58, 0x82, 0xe7, 0x42, 0x93, 0x42, 0xc6, 0x88, 0xf7, 0x4d, 0x04, 0xba, 0xfa, 0x0b, 0x05, 0x4d, 0x81, 0x4b, 0x38, 0x3f, 0xb0, 0x04, 0xe1, 0x42, 0x93, 0x52, 0xc6, 0x88, 0xf8, 0x26, 0x12, 0x5d,
0x04, 0xb4, 0x7c, 0xa6, 0x5e, 0xe8, 0xb1, 0xd9, 0x6c, 0x1f, 0x9b, 0x45, 0x22, 0x5d, 0x99, 0xb1, 0xfb, 0x41, 0x0e, 0x4d, 0x04, 0xb4, 0x7c, 0xa6, 0x5e, 0xe9, 0xb1, 0xd9, 0x6c, 0x1f, 0x9b, 0x45,
0x73, 0xd3, 0x4d, 0x09, 0x61, 0x05, 0xbf, 0x25, 0x62, 0xb8, 0x17, 0x7c, 0x47, 0xc8, 0x71, 0x47, 0x22, 0x5d, 0x85, 0xb1, 0x73, 0xd3, 0x4d, 0x49, 0x61, 0x45, 0xbf, 0x25, 0x62, 0xb8, 0x57, 0x7c,
0x38, 0x3d, 0xe8, 0xb8, 0x52, 0xe6, 0xff, 0x37, 0xd1, 0xf1, 0xd4, 0x3c, 0x4b, 0x16, 0x6c, 0x6a, 0x47, 0xc8, 0x73, 0x47, 0x38, 0x3b, 0xe8, 0xb8, 0x52, 0xe6, 0xff, 0x27, 0xd1, 0xf1, 0xd4, 0x85,
0xc0, 0x0c, 0x9a, 0x96, 0x18, 0x4f, 0xd6, 0xd9, 0x5a, 0xd6, 0xd6, 0xa8, 0x51, 0x13, 0x18, 0x95, 0x25, 0x8b, 0x0e, 0x35, 0x61, 0x06, 0x2d, 0x5b, 0x8e, 0x27, 0xeb, 0x6c, 0x2d, 0xeb, 0x6b, 0xd4,
0x71, 0x36, 0x30, 0xff, 0x8b, 0x04, 0xd8, 0xf8, 0x39, 0x54, 0x00, 0x0d, 0x3a, 0x06, 0x84, 0x56, 0xac, 0x4b, 0x8c, 0xea, 0x38, 0x1b, 0x98, 0xff, 0x45, 0x02, 0x6c, 0xfc, 0x12, 0x2a, 0x82, 0x06,
0xe1, 0x15, 0x27, 0xfa, 0xfb, 0x5a, 0xd5, 0x6c, 0xac, 0x0a, 0x06, 0xee, 0x06, 0x81, 0xd5, 0xfc, 0x5d, 0x13, 0x42, 0xab, 0xf4, 0x8a, 0x53, 0xfd, 0x7d, 0xad, 0x66, 0x35, 0x57, 0x25, 0x03, 0x77,
0x56, 0x12, 0x00, 0xaa, 0xaf, 0xe7, 0xd0, 0x81, 0xd8, 0x94, 0xe2, 0x2b, 0xe8, 0x48, 0xdd, 0x0b, 0x83, 0xc0, 0x6a, 0x7e, 0x2b, 0x09, 0x00, 0xb5, 0xef, 0xe4, 0xd1, 0xa1, 0xd8, 0x94, 0xe2, 0x6b,
0x13, 0x17, 0xdd, 0x16, 0x08, 0xa8, 0xd5, 0x37, 0x68, 0xc3, 0x35, 0x68, 0x43, 0x84, 0xdd, 0x63, 0xe8, 0x58, 0x43, 0x84, 0x89, 0xcb, 0x5e, 0x1b, 0x04, 0xd4, 0x1b, 0x1b, 0xb4, 0xe9, 0x99, 0xb4,
0x02, 0xef, 0xc8, 0x7c, 0x22, 0x15, 0x49, 0xe1, 0xc6, 0x4f, 0x20, 0xdc, 0xe6, 0x4d, 0x2b, 0xba, 0x29, 0xc3, 0xee, 0x09, 0x89, 0x77, 0x6c, 0x3e, 0x91, 0x8a, 0xa4, 0x70, 0xe3, 0x67, 0x10, 0xee,
0x6d, 0x07, 0x98, 0x39, 0x8e, 0x39, 0x23, 0x30, 0xf1, 0xc5, 0x1e, 0x0a, 0x92, 0xc0, 0xc5, 0x74, 0xf0, 0xa6, 0x15, 0xc3, 0x71, 0x02, 0xcc, 0x3c, 0xc7, 0x9c, 0x91, 0x98, 0xf8, 0x72, 0x0f, 0x05,
0x6c, 0x50, 0x5b, 0xb7, 0x68, 0x23, 0xae, 0x63, 0x5e, 0xd6, 0x71, 0x21, 0x91, 0x8a, 0xa4, 0x70, 0x49, 0xe0, 0x62, 0x3a, 0x36, 0xa9, 0x63, 0xd8, 0xb4, 0x19, 0xd7, 0xb1, 0xa0, 0xea, 0xb8, 0x90,
0xab, 0xdf, 0xcf, 0x21, 0xb4, 0x40, 0x3b, 0x86, 0xd9, 0x6d, 0xc1, 0x08, 0xf6, 0x70, 0x9d, 0xbf, 0x48, 0x45, 0x52, 0xb8, 0xf1, 0x23, 0x68, 0x4c, 0x48, 0x23, 0x54, 0x6f, 0xee, 0x94, 0x87, 0x38,
0x24, 0xad, 0xf3, 0x47, 0xb3, 0x7a, 0x6b, 0xa0, 0x62, 0xea, 0x42, 0x6f, 0xc6, 0x16, 0xfa, 0x63, 0x58, 0x10, 0x9a, 0x2e, 0x87, 0x5d, 0x24, 0x4a, 0xa7, 0x7d, 0x2d, 0x8f, 0xd0, 0x02, 0xed, 0x9a,
0x83, 0x8b, 0xe8, 0xbf, 0xd2, 0x7f, 0xa9, 0xa0, 0xc9, 0x90, 0x78, 0x3f, 0x96, 0xfa, 0x8b, 0xf2, 0xd6, 0x4e, 0x1b, 0x06, 0xbe, 0x8f, 0xe1, 0xe1, 0x35, 0x25, 0x3c, 0x3c, 0x99, 0xd5, 0xc9, 0x03,
0x52, 0x7f, 0x68, 0xe0, 0x91, 0xa5, 0xac, 0xf5, 0xb7, 0xf2, 0x08, 0x87, 0x44, 0xc4, 0x34, 0x8c, 0x15, 0x53, 0xe3, 0x43, 0x2b, 0x16, 0x1f, 0x9e, 0x1a, 0x5c, 0x44, 0xff, 0x00, 0xf1, 0xc3, 0x1c,
0x35, 0xad, 0xbe, 0x79, 0x03, 0x1b, 0xe0, 0x77, 0x60, 0xe7, 0x74, 0x3b, 0x0d, 0x96, 0x04, 0xcd, 0x9a, 0x0c, 0x89, 0x0f, 0x22, 0x42, 0xbc, 0xaa, 0x46, 0x88, 0xc7, 0x06, 0x1e, 0x59, 0x4a, 0x88,
0xb5, 0xdb, 0xa6, 0xc3, 0x13, 0x18, 0x5f, 0xcd, 0x4f, 0x0f, 0xac, 0xa6, 0xaf, 0x41, 0xf9, 0x72, 0x78, 0xb7, 0x80, 0x70, 0x48, 0x44, 0x2c, 0xd3, 0x5c, 0xd3, 0x1b, 0x9b, 0xb7, 0xb0, 0x6f, 0x7e,
0x0f, 0xf6, 0x62, 0xdb, 0xb1, 0xba, 0xe1, 0xea, 0xe9, 0x25, 0x20, 0x09, 0x0a, 0xe1, 0x97, 0x11, 0x19, 0x36, 0x5c, 0xaf, 0xdb, 0x64, 0xb9, 0xd3, 0x5c, 0xa7, 0x63, 0xb9, 0x3c, 0xef, 0xf1, 0xd5,
0xb2, 0x04, 0xe6, 0xaa, 0x29, 0xfc, 0x23, 0xab, 0x0b, 0xfa, 0x4a, 0xcd, 0x9b, 0xed, 0x75, 0xbd, 0xfc, 0xc7, 0x81, 0xd5, 0xf4, 0x35, 0xa8, 0x5c, 0xed, 0xc1, 0x5e, 0xec, 0xb8, 0xf6, 0x4e, 0xb8,
0x19, 0x7a, 0x3b, 0x09, 0x80, 0x49, 0x44, 0xc8, 0xcc, 0x22, 0x3a, 0x9a, 0xa2, 0x3d, 0x9e, 0x42, 0xe8, 0x7a, 0x09, 0x48, 0x82, 0x42, 0xf8, 0x75, 0x84, 0x6c, 0x89, 0xb9, 0x6a, 0x49, 0xff, 0xc8,
0xf9, 0x4d, 0xda, 0xf5, 0xcc, 0x4a, 0xd8, 0x7f, 0xf1, 0x74, 0x34, 0x91, 0x28, 0x8a, 0x2c, 0xe0, 0xea, 0x82, 0xbe, 0x52, 0xf3, 0x56, 0x67, 0xdd, 0x68, 0x85, 0xde, 0x4e, 0x02, 0x60, 0x12, 0x11,
0x4c, 0xee, 0xb4, 0xa2, 0xbe, 0x35, 0x1c, 0x75, 0x36, 0x1e, 0x87, 0xef, 0x41, 0x05, 0x0b, 0x5a, 0x32, 0xb3, 0x88, 0x8e, 0xa7, 0x68, 0x8f, 0xa7, 0x50, 0x61, 0x93, 0xee, 0x08, 0xb3, 0x12, 0xf6,
0xf4, 0xba, 0x66, 0x8b, 0x00, 0xc5, 0x23, 0x29, 0x11, 0x6d, 0x24, 0xe8, 0x95, 0x22, 0x76, 0x6e, 0x5f, 0x3c, 0x1d, 0xcd, 0x3f, 0x4a, 0x32, 0x79, 0x38, 0x97, 0x3f, 0x9b, 0xd3, 0xde, 0x1d, 0x8e,
0x9f, 0x22, 0x76, 0x7e, 0x97, 0x23, 0x36, 0x36, 0x61, 0x10, 0x0e, 0xcb, 0xb3, 0x9b, 0xdd, 0xd2, 0x3a, 0x1b, 0x0f, 0xdf, 0x0f, 0xa0, 0xa2, 0x0d, 0x2d, 0x46, 0x43, 0x77, 0x64, 0x5c, 0xe3, 0x01,
0x10, 0x07, 0x9f, 0xdb, 0xc1, 0xca, 0xf6, 0x80, 0x42, 0x81, 0x7e, 0x0b, 0x09, 0x84, 0xe0, 0x39, 0x98, 0xc8, 0x36, 0x12, 0xf4, 0x2a, 0x81, 0x3e, 0x7f, 0x40, 0x81, 0xbe, 0xb0, 0xc7, 0x81, 0x1e,
0x74, 0xa0, 0xa5, 0xb7, 0x09, 0xd5, 0x1a, 0xdd, 0x1a, 0xad, 0x9b, 0xed, 0x86, 0x5d, 0x1a, 0xe6, 0x5b, 0x30, 0x08, 0x97, 0xa5, 0xe7, 0x2d, 0x11, 0xd5, 0xb2, 0xa7, 0x4a, 0xd1, 0x95, 0x2d, 0x80,
0x66, 0x3e, 0x2a, 0x98, 0x0e, 0xac, 0xc8, 0xdd, 0x24, 0x4e, 0x8f, 0x97, 0xd1, 0xb4, 0x45, 0xb7, 0x42, 0x81, 0x7e, 0x0b, 0x09, 0x84, 0xe0, 0x39, 0x74, 0xa8, 0x6d, 0x74, 0x78, 0x78, 0xac, 0xd3,
0x74, 0xa6, 0xc6, 0x79, 0x58, 0xce, 0xa6, 0xd5, 0x5d, 0xd6, 0x5b, 0xba, 0x53, 0x1a, 0xf1, 0xd2, 0x86, 0xd5, 0x69, 0x3a, 0xe5, 0x61, 0x6e, 0xe6, 0xe3, 0x92, 0xe9, 0xd0, 0x8a, 0xda, 0x4d, 0xe2,
0x78, 0xc0, 0x98, 0x26, 0x09, 0xfd, 0x24, 0x91, 0x0b, 0xdf, 0x85, 0x46, 0x3a, 0x9a, 0x6b, 0x43, 0xf4, 0x78, 0x19, 0x4d, 0xdb, 0x74, 0xcb, 0x60, 0x6a, 0x5c, 0x84, 0xe5, 0x6c, 0xd9, 0x3b, 0xcb,
0xac, 0x1f, 0x05, 0xfe, 0x42, 0x18, 0x98, 0xaa, 0xbc, 0x95, 0x88, 0x5e, 0x48, 0x9b, 0xa3, 0x5e, 0x46, 0xdb, 0x70, 0xcb, 0x23, 0x22, 0xfb, 0x07, 0x8c, 0x69, 0x92, 0xd0, 0x4f, 0x12, 0xb9, 0xf0,
0x5e, 0xd8, 0x0d, 0x2f, 0x9f, 0x4c, 0xf7, 0x70, 0xf5, 0xe3, 0x1c, 0x9a, 0x8a, 0x07, 0x4d, 0xb6, 0x7d, 0x68, 0xa4, 0xab, 0x7b, 0x0e, 0x6c, 0x11, 0xa3, 0xc0, 0x5f, 0x0c, 0x03, 0x53, 0x8d, 0xb7,
0xe7, 0x99, 0x6b, 0x36, 0xb5, 0xb6, 0x68, 0xe3, 0x9c, 0x77, 0x3e, 0x02, 0x78, 0xee, 0xa6, 0xf9, 0x12, 0xd9, 0x0b, 0xd9, 0x76, 0xd4, 0xcb, 0x8b, 0x7b, 0xe1, 0xe5, 0x93, 0xe9, 0x1e, 0xae, 0x7d,
0x70, 0xd5, 0x5e, 0xea, 0xa1, 0x20, 0x09, 0x5c, 0xf8, 0xbe, 0x88, 0xa3, 0x7b, 0xbb, 0x66, 0x30, 0x96, 0x47, 0x53, 0xf1, 0xa0, 0xc9, 0xb6, 0x4a, 0x6b, 0xcd, 0xa1, 0xf6, 0x16, 0x6d, 0x5e, 0x10,
0x6d, 0x09, 0xce, 0x0e, 0xd3, 0x26, 0x56, 0xbe, 0xdf, 0x29, 0xb6, 0xc6, 0x60, 0xda, 0x2e, 0xcb, 0xc7, 0x2a, 0x80, 0xe7, 0x6e, 0x5a, 0x08, 0x57, 0xed, 0x95, 0x1e, 0x0a, 0x92, 0xc0, 0x85, 0x1f,
0xdd, 0x24, 0x4e, 0x8f, 0xcf, 0xa1, 0x83, 0xda, 0x96, 0xa6, 0x1b, 0xda, 0x9a, 0x41, 0x03, 0x90, 0x8a, 0x38, 0xba, 0xd8, 0x6c, 0x83, 0x69, 0x4b, 0x70, 0x76, 0x98, 0x36, 0xb9, 0xf2, 0xfd, 0x4e,
0x21, 0x0e, 0x72, 0xb3, 0x00, 0x39, 0x38, 0x17, 0x27, 0x20, 0xbd, 0x3c, 0x78, 0x05, 0x1d, 0x72, 0xb9, 0xa3, 0x06, 0xd3, 0x76, 0x55, 0xed, 0x26, 0x71, 0x7a, 0x7c, 0x01, 0x1d, 0xd6, 0xb7, 0x74,
0xdb, 0xbd, 0x50, 0x9e, 0x1b, 0xdd, 0x22, 0xa0, 0x0e, 0x5d, 0xee, 0x25, 0x21, 0x49, 0x7c, 0xea, 0xc3, 0xd4, 0xd7, 0x4c, 0x1a, 0x80, 0x88, 0x9d, 0xf4, 0x76, 0x09, 0x72, 0x78, 0x2e, 0x4e, 0x40,
0xaf, 0x94, 0x68, 0x7c, 0xf6, 0x5d, 0x16, 0x9f, 0x41, 0x43, 0x4e, 0xb7, 0xe3, 0xc7, 0xe7, 0xbb, 0x7a, 0x79, 0xf0, 0x0a, 0x3a, 0xe2, 0x75, 0x7a, 0xa1, 0x84, 0x1b, 0xdd, 0x21, 0xa1, 0x8e, 0x5c,
0xfc, 0xf8, 0xbc, 0x0a, 0x6d, 0x9f, 0xf0, 0x4c, 0x20, 0xce, 0xc1, 0x7a, 0x08, 0xe7, 0xc1, 0x9f, 0xed, 0x25, 0x21, 0x49, 0x7c, 0xda, 0x8f, 0x72, 0xd1, 0xf8, 0xec, 0xbb, 0x2c, 0x3e, 0x87, 0x86,
0x47, 0x13, 0x6c, 0x2a, 0xf5, 0x76, 0xd3, 0xb3, 0x8a, 0x88, 0x0f, 0x4b, 0x03, 0xb8, 0x4b, 0x80, 0xdc, 0x9d, 0xae, 0x1f, 0x9f, 0xef, 0xf3, 0xe3, 0xf3, 0x2a, 0xb4, 0x7d, 0xce, 0x13, 0x88, 0x38,
0x11, 0xd9, 0x67, 0x0e, 0x82, 0x22, 0x13, 0x52, 0x27, 0x91, 0xe5, 0xc1, 0xe9, 0x77, 0x62, 0x71, 0x07, 0xeb, 0x21, 0x9c, 0x07, 0xff, 0x2b, 0x9a, 0x60, 0x53, 0x69, 0x74, 0x5a, 0xc2, 0x2a, 0x32,
0xbb, 0x63, 0x5a, 0xce, 0xa5, 0x8e, 0x17, 0xa3, 0xc1, 0xcb, 0x29, 0x6f, 0xe0, 0xe3, 0x89, 0x78, 0x3e, 0x2c, 0x0d, 0xe0, 0x2e, 0x01, 0x46, 0x64, 0x9f, 0x39, 0x0c, 0x8a, 0x4c, 0x28, 0x9d, 0x44,
0xb9, 0x47, 0x46, 0x44, 0x2f, 0xbe, 0x13, 0x0d, 0xd3, 0x6d, 0xad, 0xee, 0x70, 0x8d, 0x0b, 0xe1, 0x95, 0x07, 0x87, 0xe6, 0x89, 0xc5, 0xed, 0xae, 0x65, 0xbb, 0x57, 0xba, 0x22, 0x46, 0x83, 0x97,
0x8e, 0xb6, 0xc8, 0x1a, 0x89, 0xd7, 0xa7, 0xfe, 0x00, 0x0e, 0x50, 0x4b, 0xb5, 0x73, 0x96, 0xe9, 0x53, 0xde, 0xc0, 0xc7, 0x13, 0xf1, 0x72, 0x41, 0x46, 0x64, 0x2f, 0xbe, 0x17, 0x0d, 0xd3, 0x6d,
0x76, 0xfc, 0xc1, 0xfb, 0x72, 0x3e, 0x85, 0x86, 0x2c, 0x48, 0x7d, 0x84, 0xd5, 0xee, 0xf4, 0xad, 0xbd, 0xe1, 0x72, 0x8d, 0x8b, 0xe1, 0x8e, 0xb6, 0xc8, 0x1a, 0x89, 0xe8, 0xd3, 0xbe, 0x0e, 0xe7,
0x46, 0xa0, 0x0d, 0xac, 0x76, 0x28, 0xc6, 0xe5, 0x99, 0x8c, 0x31, 0xc0, 0x2e, 0x3c, 0x62, 0x69, 0xae, 0xa5, 0xfa, 0x05, 0xdb, 0xf2, 0xba, 0xfe, 0xe0, 0x7d, 0x39, 0xff, 0x80, 0x86, 0x6c, 0xc8,
0xed, 0x26, 0xf5, 0xf7, 0xb7, 0x07, 0x33, 0xda, 0xea, 0xc2, 0x02, 0x61, 0xec, 0xe1, 0xc0, 0xf8, 0x98, 0xa4, 0xd5, 0xee, 0xf5, 0xad, 0x46, 0xa0, 0x0d, 0xac, 0x76, 0x24, 0xc6, 0x25, 0x4c, 0xc6,
0x27, 0xe4, 0x15, 0x1e, 0xaa, 0xfa, 0x4d, 0x05, 0x1d, 0x38, 0xbf, 0xba, 0x5a, 0xbd, 0xd0, 0x6e, 0x18, 0x60, 0x17, 0x1e, 0xb1, 0xf5, 0x4e, 0x8b, 0xfa, 0xfb, 0xdb, 0xa3, 0x19, 0x6d, 0x75, 0x69,
0xc2, 0x69, 0xd1, 0xae, 0x6a, 0xce, 0x06, 0xdb, 0x82, 0x3b, 0xf0, 0x6f, 0x7c, 0x0b, 0x66, 0x7d, 0x81, 0x30, 0xf6, 0x70, 0x60, 0xfc, 0x13, 0xf2, 0x0a, 0x81, 0xaa, 0x7d, 0x21, 0x87, 0x0e, 0x5d,
0x84, 0xf7, 0xe0, 0x0d, 0x34, 0xca, 0xd6, 0x23, 0x6d, 0x37, 0x06, 0x4c, 0xad, 0x84, 0xb8, 0x8a, 0x5c, 0x5d, 0xad, 0x5d, 0xea, 0xb4, 0xe0, 0x90, 0xe9, 0xd4, 0x74, 0x77, 0x83, 0x6d, 0xc1, 0x5d,
0x07, 0x52, 0x39, 0x20, 0x64, 0x8c, 0x8a, 0x06, 0xe2, 0xc3, 0xab, 0x9f, 0x45, 0xd3, 0x11, 0xf5, 0xf8, 0x37, 0xbe, 0x05, 0xb3, 0x3e, 0xc2, 0x7b, 0xf0, 0x06, 0x1a, 0x65, 0xeb, 0x91, 0x76, 0x9a,
0x98, 0xbd, 0xf8, 0x99, 0x15, 0xd7, 0xd1, 0x30, 0xd3, 0xc4, 0x3f, 0x91, 0x66, 0x3d, 0x60, 0xc5, 0x03, 0xa6, 0x56, 0x52, 0x5c, 0x55, 0x80, 0x54, 0x0f, 0x49, 0x19, 0xa3, 0xb2, 0x81, 0xf8, 0xf0,
0x86, 0x1c, 0x4e, 0x28, 0xfb, 0x82, 0x14, 0x85, 0x63, 0xab, 0xbf, 0xcb, 0xa1, 0xa3, 0xe7, 0x4d, 0xda, 0x3f, 0xa3, 0xe9, 0x88, 0x7a, 0xcc, 0x5e, 0xfc, 0xa8, 0x8b, 0x1b, 0x68, 0x98, 0x69, 0xe2,
0x4b, 0x7f, 0xd5, 0x6c, 0x3b, 0x9a, 0x01, 0xfb, 0xc7, 0x9c, 0xeb, 0x98, 0x76, 0x5d, 0x33, 0xa8, 0x1f, 0x64, 0xb3, 0x9e, 0xcb, 0x62, 0x43, 0x0e, 0x27, 0x94, 0x7d, 0x41, 0x8a, 0xc2, 0xb1, 0xb5,
0xb5, 0x87, 0x49, 0xab, 0x21, 0x25, 0xad, 0x4f, 0x64, 0x1d, 0x59, 0xb2, 0xbe, 0xa9, 0x19, 0xac, 0x9f, 0xe5, 0xd1, 0xf1, 0x8b, 0x96, 0x6d, 0xbc, 0x69, 0x75, 0x5c, 0xdd, 0x84, 0xfd, 0x63, 0xce,
0x13, 0xcb, 0x60, 0x97, 0x77, 0x49, 0x5e, 0xff, 0x74, 0xf6, 0x6f, 0x0a, 0xba, 0x25, 0x85, 0x73, 0x73, 0x2d, 0xa7, 0xa1, 0x9b, 0xd4, 0xde, 0xc7, 0xa4, 0xd5, 0x54, 0x92, 0xd6, 0x67, 0xb2, 0x8e,
0x3f, 0x72, 0xdb, 0x4d, 0x39, 0xb7, 0x5d, 0xda, 0x9d, 0x31, 0xa7, 0x24, 0xba, 0x7f, 0xcf, 0xa5, 0x2c, 0x59, 0xdf, 0xd4, 0x0c, 0xd6, 0x8d, 0x65, 0xb0, 0xcb, 0x7b, 0x24, 0xaf, 0x7f, 0x3a, 0xfb,
0x8e, 0x95, 0xa7, 0x56, 0x2f, 0x43, 0xae, 0xc1, 0xbe, 0x08, 0x5d, 0x17, 0x63, 0x9d, 0xcf, 0xa8, 0xbb, 0x1c, 0xba, 0x23, 0x85, 0xf3, 0x20, 0x72, 0xdb, 0x4d, 0x35, 0xb7, 0x5d, 0xda, 0x9b, 0x31,
0x4f, 0xcd, 0x5d, 0xf3, 0xaf, 0x7a, 0x00, 0x84, 0xc2, 0xb1, 0xb0, 0x4e, 0x23, 0xd9, 0x86, 0x00, 0xa7, 0x24, 0xba, 0xbf, 0xcf, 0xa7, 0x8e, 0x95, 0xa7, 0x56, 0xaf, 0x43, 0xae, 0xc1, 0xbe, 0x08,
0x27, 0x81, 0x18, 0x7c, 0x12, 0x8d, 0xf1, 0xec, 0x41, 0xda, 0xe7, 0x0e, 0xb0, 0x7b, 0xa1, 0x95, 0x5d, 0x97, 0x63, 0x9d, 0xcf, 0xa8, 0x4f, 0xdd, 0x5b, 0xf3, 0x6f, 0x88, 0x00, 0x84, 0xc2, 0x69,
0xb0, 0x99, 0x44, 0x69, 0xf0, 0x03, 0xc0, 0xa2, 0x6d, 0xc7, 0x76, 0xb9, 0xe0, 0x3a, 0x69, 0x25, 0xb2, 0x41, 0x23, 0xd9, 0x86, 0x04, 0x27, 0x81, 0x18, 0x7c, 0x1a, 0x8d, 0xf1, 0xec, 0x41, 0xd9,
0xec, 0x22, 0x51, 0x3a, 0x08, 0xf9, 0x93, 0xf5, 0x8e, 0x1b, 0xb9, 0x69, 0x14, 0xe9, 0x54, 0xd6, 0xe7, 0x0e, 0xb1, 0x33, 0xdb, 0x4a, 0xd8, 0x4c, 0xa2, 0x34, 0xec, 0xa8, 0xd7, 0xd6, 0xb7, 0x63,
0x21, 0x26, 0x5d, 0x5a, 0x56, 0x30, 0x88, 0x9e, 0x84, 0x9e, 0x48, 0x1b, 0x89, 0x89, 0x53, 0xdf, 0xbb, 0x5c, 0x70, 0xd4, 0x5b, 0x09, 0xbb, 0x48, 0x94, 0x0e, 0x42, 0xfe, 0x64, 0xa3, 0xeb, 0x45,
0xcd, 0xa3, 0xdb, 0xfa, 0xfa, 0x28, 0x5e, 0xea, 0x93, 0x3d, 0x1c, 0xc9, 0x90, 0x39, 0x34, 0xd0, 0x2e, 0x28, 0x65, 0x3a, 0x95, 0x75, 0x88, 0x49, 0x77, 0x9d, 0x55, 0x0c, 0xa2, 0x27, 0xa1, 0x27,
0x84, 0xa1, 0xd9, 0x0e, 0x37, 0xf7, 0xaa, 0xde, 0xf2, 0x77, 0xb7, 0xff, 0xbd, 0x41, 0xc7, 0x65, 0xd2, 0x46, 0x62, 0xe2, 0xb4, 0x0f, 0x0a, 0xe8, 0xae, 0xbe, 0x3e, 0x8a, 0x97, 0xfa, 0x64, 0x0f,
0x2c, 0xde, 0x16, 0xb6, 0x1c, 0x45, 0x21, 0x32, 0x28, 0xcb, 0x38, 0xc4, 0xc9, 0x3f, 0x2d, 0xe3, 0xc7, 0x32, 0x64, 0x0e, 0x4d, 0x34, 0x61, 0xea, 0x8e, 0xcb, 0xcd, 0xbd, 0x6a, 0xb4, 0xfd, 0xdd,
0x98, 0x97, 0xbb, 0x49, 0x9c, 0x9e, 0x41, 0x88, 0x83, 0x79, 0x2c, 0xdf, 0x08, 0x20, 0x16, 0xe4, 0xed, 0x6f, 0x6f, 0xd1, 0x71, 0x19, 0x8b, 0xd8, 0xc2, 0x96, 0xa3, 0x28, 0x44, 0x05, 0x65, 0x19,
0x6e, 0x12, 0xa7, 0x87, 0xac, 0xef, 0xb8, 0x40, 0x95, 0xcd, 0x1f, 0xb9, 0x3d, 0xf6, 0xf2, 0x8e, 0x87, 0xbc, 0x30, 0x48, 0xcb, 0x38, 0xe6, 0xd5, 0x6e, 0x12, 0xa7, 0x67, 0x10, 0xf2, 0x3c, 0x1f,
0x3b, 0x01, 0xee, 0xf8, 0x7c, 0x7f, 0x52, 0x72, 0x3d, 0x2c, 0x75, 0x05, 0x4d, 0x9c, 0x37, 0x6d, 0xcb, 0x37, 0x02, 0x88, 0x05, 0xb5, 0x9b, 0xc4, 0xe9, 0x21, 0xeb, 0x3b, 0x29, 0x51, 0x55, 0xf3,
0xa7, 0xca, 0xb6, 0x64, 0xb6, 0x6f, 0xe1, 0xdb, 0x50, 0x1e, 0x9c, 0x53, 0x9c, 0x44, 0xc6, 0x84, 0x47, 0x2e, 0x9d, 0x45, 0xde, 0x71, 0x2f, 0xc0, 0x9d, 0x9c, 0xef, 0x4f, 0x4a, 0x6e, 0x86, 0xa5,
0xda, 0x79, 0xe6, 0xbc, 0xac, 0x9d, 0x77, 0x6b, 0xdb, 0xc2, 0xaf, 0xc3, 0x6e, 0xf0, 0x4b, 0xd6, 0xad, 0xa0, 0x89, 0x8b, 0x96, 0xe3, 0xd6, 0xd8, 0x96, 0xcc, 0xf6, 0x2d, 0x7c, 0x17, 0x2a, 0x80,
0xae, 0x9e, 0x43, 0xa3, 0x62, 0x5f, 0x8c, 0x02, 0xe5, 0xfb, 0x03, 0xe5, 0x13, 0x80, 0xbe, 0x9b, 0x73, 0xca, 0x93, 0xc8, 0x98, 0x54, 0xbb, 0xc0, 0x9c, 0x97, 0xb5, 0xf3, 0x6e, 0x7d, 0x5b, 0xfa,
0x03, 0x24, 0x6f, 0x1b, 0xd9, 0xc3, 0x0d, 0xe1, 0x79, 0x69, 0x43, 0x38, 0x33, 0xd8, 0x56, 0x9b, 0x75, 0xd8, 0x0d, 0x7e, 0xc9, 0xda, 0xb5, 0x0b, 0x68, 0x54, 0xee, 0x8b, 0x51, 0xa0, 0x42, 0x7f,
0xba, 0x01, 0x34, 0x62, 0x1b, 0xc0, 0x23, 0x03, 0xe2, 0xf7, 0x0f, 0xf8, 0x6f, 0x2b, 0x68, 0x52, 0xa0, 0x42, 0x02, 0xd0, 0x57, 0xf2, 0x80, 0x24, 0xb6, 0x91, 0x7d, 0xdc, 0x10, 0x5e, 0x56, 0x36,
0xde, 0xf4, 0x59, 0x44, 0x61, 0x6b, 0x48, 0xaf, 0xd3, 0x8b, 0xe1, 0x81, 0x3f, 0x88, 0x28, 0xb5, 0x84, 0x73, 0x83, 0x6d, 0xb5, 0xa9, 0x1b, 0x40, 0x33, 0xb6, 0x01, 0x3c, 0x31, 0x20, 0x7e, 0xff,
0xb0, 0x8b, 0x44, 0xe9, 0x30, 0x0d, 0xd8, 0x98, 0x3b, 0x08, 0xa3, 0x94, 0x53, 0x94, 0x66, 0x4f, 0x80, 0xff, 0x5e, 0x0e, 0x4d, 0xaa, 0x9b, 0x3e, 0x8b, 0x28, 0x6c, 0x0d, 0x19, 0x0d, 0x7a, 0x39,
0x27, 0x65, 0xef, 0xe9, 0x04, 0x14, 0x75, 0x2e, 0xc1, 0x9a, 0xb7, 0x20, 0x1d, 0xec, 0x11, 0xc3, 0x3c, 0xf0, 0x07, 0x11, 0xa5, 0x1e, 0x76, 0x91, 0x28, 0x1d, 0xa6, 0x01, 0x1b, 0x73, 0x07, 0x69,
0x3d, 0x2b, 0x8a, 0xab, 0xfe, 0x5c, 0x41, 0x63, 0x42, 0xe1, 0xfd, 0xd8, 0x91, 0x9e, 0x93, 0x77, 0x94, 0x4a, 0x8a, 0xd2, 0xec, 0xc5, 0xa5, 0x22, 0x5e, 0x5c, 0x40, 0x51, 0xf7, 0x0a, 0xac, 0x79,
0xa4, 0x07, 0x07, 0xcc, 0xa7, 0x92, 0x77, 0xa0, 0x77, 0xc2, 0xb1, 0xb0, 0x0c, 0x8a, 0x25, 0x78, 0x1b, 0xd2, 0xc1, 0x1e, 0x31, 0xdc, 0xb3, 0xa2, 0xb8, 0xda, 0xf7, 0x73, 0x68, 0x4c, 0x2a, 0x7c,
0x1b, 0xb0, 0x9c, 0xe2, 0x09, 0x1e, 0x5b, 0x62, 0x84, 0xf7, 0xe0, 0x2f, 0x2b, 0x68, 0x4a, 0x8f, 0x10, 0x3b, 0xd2, 0x4b, 0xea, 0x8e, 0xf4, 0xe8, 0x80, 0xf9, 0x54, 0xf2, 0x0e, 0xf4, 0x7e, 0x38,
0xe5, 0x5c, 0xc2, 0xd4, 0x8f, 0x0d, 0xa6, 0x5a, 0x00, 0x13, 0x3e, 0x28, 0xc5, 0x7b, 0x48, 0x8f, 0x16, 0x96, 0x41, 0xb1, 0x04, 0x6f, 0x03, 0x96, 0x53, 0x3c, 0xc1, 0x63, 0x4b, 0x8c, 0xf0, 0x1e,
0x48, 0xd5, 0x45, 0x3d, 0x54, 0x58, 0x03, 0xed, 0x1d, 0xa7, 0x33, 0xe0, 0x5e, 0x99, 0x94, 0x4d, 0xfc, 0x9f, 0x39, 0x34, 0x65, 0xc4, 0x72, 0x2e, 0x69, 0xea, 0xa7, 0x06, 0x53, 0x2d, 0x80, 0x09,
0x56, 0x0a, 0x7c, 0xf8, 0xd0, 0x43, 0x38, 0xb4, 0xfa, 0x76, 0x2e, 0x30, 0x58, 0xcd, 0x5b, 0x23, 0xdf, 0xa1, 0xe2, 0x3d, 0xa4, 0x47, 0xa4, 0xe6, 0xa1, 0x1e, 0x2a, 0xac, 0x83, 0xf6, 0xae, 0xdb,
0x41, 0xbe, 0xab, 0xec, 0x46, 0xbe, 0x3b, 0x96, 0x94, 0xeb, 0x42, 0x04, 0xc9, 0x3b, 0xc6, 0xa0, 0x1d, 0x70, 0xaf, 0x4c, 0xca, 0x26, 0xab, 0x45, 0x3e, 0x7c, 0xe8, 0x21, 0x1c, 0x5a, 0x7b, 0x2f,
0xf7, 0x6d, 0x42, 0xc2, 0xea, 0x72, 0x2d, 0x8c, 0x53, 0xf0, 0x41, 0x18, 0x24, 0x7e, 0x09, 0x0d, 0x1f, 0x18, 0xac, 0x2e, 0xd6, 0x48, 0x90, 0xef, 0xe6, 0xf6, 0x22, 0xdf, 0x1d, 0x4b, 0xca, 0x75,
0xb3, 0xd3, 0x04, 0x5b, 0xe2, 0xf9, 0xc1, 0x43, 0x08, 0xb3, 0x57, 0xe8, 0x61, 0xec, 0x0b, 0x3c, 0x21, 0x82, 0x14, 0x5c, 0x73, 0xd0, 0xfb, 0x36, 0x29, 0x61, 0x75, 0xb9, 0x1e, 0xc6, 0x29, 0xf8,
0x8c, 0xe3, 0x42, 0x9a, 0x3e, 0x21, 0xc5, 0x01, 0x7c, 0x15, 0x8d, 0x1b, 0xa6, 0xd6, 0xa8, 0x68, 0x20, 0x0c, 0x12, 0xbf, 0x86, 0x86, 0xd9, 0x69, 0x82, 0x2d, 0xf1, 0xc2, 0xe0, 0x21, 0x84, 0xd9,
0x86, 0x06, 0xc9, 0x88, 0x7f, 0x77, 0xff, 0x7f, 0xfd, 0x23, 0xe2, 0x72, 0x84, 0x43, 0xc4, 0x93, 0x2b, 0xf4, 0x30, 0xf6, 0x05, 0x1e, 0xc6, 0x71, 0x21, 0x4d, 0x9f, 0x50, 0xe2, 0x00, 0xbe, 0x8e,
0xe0, 0x51, 0x2f, 0xda, 0x47, 0x24, 0x6c, 0x55, 0x43, 0x28, 0x1c, 0x3d, 0x3e, 0x8e, 0x86, 0x99, 0xc6, 0x4d, 0x4b, 0x6f, 0x56, 0x75, 0x53, 0x87, 0x64, 0xc4, 0xbf, 0xf2, 0xff, 0xbb, 0xfe, 0x11,
0x0b, 0x7b, 0x27, 0x83, 0x62, 0xa5, 0xc8, 0x74, 0x65, 0x9e, 0x0d, 0xba, 0xf2, 0x76, 0x7c, 0x0a, 0x71, 0x39, 0xc2, 0x21, 0xe3, 0x49, 0xf0, 0x16, 0x18, 0xed, 0x23, 0x0a, 0xb6, 0xa6, 0x23, 0x14,
0x21, 0x9b, 0xd6, 0x2d, 0xea, 0xf0, 0xb0, 0xc3, 0x2f, 0xbf, 0xc2, 0x00, 0x5c, 0x0b, 0x7a, 0x48, 0x8e, 0x1e, 0x9f, 0x44, 0xc3, 0xcc, 0x85, 0xc5, 0xc9, 0xa0, 0x54, 0x2d, 0x31, 0x5d, 0x99, 0x67,
0x84, 0x4a, 0xfd, 0x7a, 0x0e, 0xe5, 0x9f, 0x30, 0xd7, 0xf6, 0x30, 0xc8, 0x3f, 0x23, 0x05, 0xf9, 0x83, 0xae, 0xbc, 0x1d, 0x9f, 0x41, 0xc8, 0xa1, 0x0d, 0x9b, 0xba, 0x3c, 0xec, 0xf0, 0xcb, 0xaf,
0xac, 0xeb, 0x1f, 0x74, 0x4b, 0x0d, 0xf0, 0x9f, 0x89, 0x05, 0xf8, 0xd3, 0x03, 0x60, 0xf7, 0x0f, 0x30, 0x00, 0xd7, 0x83, 0x1e, 0x12, 0xa1, 0xd2, 0xfe, 0x2f, 0x8f, 0x0a, 0xcf, 0x58, 0x6b, 0xfb,
0xee, 0xbf, 0xce, 0xa3, 0x71, 0xa0, 0x9a, 0x37, 0xdb, 0x0d, 0x9d, 0xa7, 0x42, 0xf7, 0x4b, 0x97, 0x18, 0xe4, 0x5f, 0x50, 0x82, 0x7c, 0xd6, 0xf5, 0x0f, 0xba, 0xa5, 0x06, 0xf8, 0x7f, 0x8a, 0x05,
0x04, 0xb7, 0xc7, 0x2e, 0x09, 0xa6, 0xa2, 0xb4, 0x91, 0xeb, 0x81, 0x2b, 0x81, 0xa2, 0xde, 0xa4, 0xf8, 0xb3, 0x03, 0x60, 0xf7, 0x0f, 0xee, 0x3f, 0x2e, 0xa0, 0x71, 0xa0, 0x9a, 0xb7, 0x3a, 0x4d,
0x9c, 0x95, 0xc5, 0x01, 0x67, 0xdf, 0xd7, 0xf7, 0x72, 0x80, 0x29, 0xab, 0x07, 0xa7, 0x55, 0x9e, 0x83, 0xa7, 0x42, 0x0f, 0x2b, 0x97, 0x04, 0x77, 0xc7, 0x2e, 0x09, 0xa6, 0xa2, 0xb4, 0x91, 0xeb,
0x43, 0x55, 0x2d, 0x73, 0xcd, 0x4b, 0xcc, 0xf2, 0xd9, 0x13, 0xb3, 0xc3, 0x42, 0x17, 0x9e, 0x9c, 0x81, 0x6b, 0x81, 0xa2, 0x62, 0x52, 0xce, 0xab, 0xe2, 0x80, 0xb3, 0xef, 0xa3, 0x7d, 0x25, 0xc0,
0x05, 0x48, 0x44, 0x06, 0xc6, 0xaf, 0x20, 0xcc, 0x1a, 0x56, 0xe1, 0x70, 0x6d, 0x7b, 0xa3, 0x63, 0x54, 0xd5, 0x83, 0xd3, 0x2a, 0xcf, 0xa1, 0x6a, 0xb6, 0xb5, 0x26, 0x12, 0xb3, 0x42, 0xf6, 0xc4,
0xe2, 0x86, 0xb2, 0x8b, 0x0b, 0x6e, 0xad, 0x96, 0x7b, 0xe0, 0x48, 0x82, 0x08, 0x76, 0x8f, 0x61, 0xec, 0xa8, 0xd4, 0x85, 0x27, 0x67, 0x01, 0x12, 0x51, 0x81, 0xf1, 0x1b, 0x08, 0xb3, 0x86, 0x55,
0x51, 0xcd, 0x86, 0xbc, 0x75, 0x98, 0x9b, 0x2e, 0x3c, 0xee, 0xf3, 0x56, 0x22, 0x7a, 0xf1, 0xbd, 0x38, 0x5c, 0x3b, 0x62, 0x74, 0x4c, 0xdc, 0x50, 0x76, 0x71, 0xc1, 0xad, 0xd5, 0x72, 0x0f, 0x1c,
0x68, 0xb4, 0x05, 0xeb, 0x84, 0xe5, 0x67, 0x23, 0x9c, 0x30, 0x38, 0x79, 0xaf, 0x78, 0xcd, 0xc4, 0x49, 0x10, 0xc1, 0xee, 0x31, 0x6c, 0xaa, 0x3b, 0x90, 0xb7, 0x0e, 0x73, 0xd3, 0x85, 0xc7, 0x7d,
0xef, 0x57, 0x7f, 0xa2, 0xa0, 0x51, 0x98, 0xa8, 0xfd, 0xd8, 0xfc, 0x9e, 0x96, 0x37, 0xbf, 0x53, 0xde, 0x4a, 0x64, 0x2f, 0x7e, 0x10, 0x8d, 0xb6, 0x61, 0x9d, 0xb0, 0xfc, 0x6c, 0x84, 0x13, 0x06,
0xd9, 0x1d, 0x34, 0x65, 0xe3, 0xfb, 0x51, 0x9e, 0x8f, 0x81, 0xc7, 0x70, 0x38, 0xf3, 0x74, 0x34, 0x27, 0xef, 0x15, 0xd1, 0x4c, 0xfc, 0x7e, 0xed, 0xdb, 0x39, 0x34, 0x0a, 0x13, 0x75, 0x10, 0x9b,
0x4b, 0x33, 0x0c, 0x6a, 0xe8, 0x76, 0x4b, 0xa4, 0x8e, 0xfc, 0xcc, 0x53, 0x0d, 0x9b, 0x49, 0x94, 0xdf, 0xf3, 0xea, 0xe6, 0x77, 0x26, 0xbb, 0x83, 0xa6, 0x6c, 0x7c, 0xdf, 0x2c, 0xf0, 0x31, 0xf0,
0x86, 0xb1, 0xd4, 0xcd, 0x56, 0xc7, 0xa0, 0xfe, 0x0b, 0x43, 0xc0, 0x32, 0x1f, 0x36, 0x93, 0x28, 0x18, 0x0e, 0x67, 0x9e, 0xae, 0x6e, 0xeb, 0xa6, 0x49, 0x4d, 0xc3, 0x69, 0xcb, 0xd4, 0x91, 0x9f,
0x0d, 0xbe, 0x84, 0x0e, 0x6b, 0x75, 0x47, 0xdf, 0xa2, 0x0b, 0x54, 0x6b, 0x18, 0x7a, 0x9b, 0xfa, 0x79, 0x6a, 0x61, 0x33, 0x89, 0xd2, 0x30, 0x96, 0x86, 0xd5, 0xee, 0x9a, 0xd4, 0x7f, 0x61, 0x08,
0xb7, 0xb9, 0x79, 0x9e, 0x42, 0xde, 0x0c, 0xcc, 0x87, 0xe7, 0x92, 0x08, 0x48, 0x32, 0x9f, 0x74, 0x58, 0xe6, 0xc3, 0x66, 0x12, 0xa5, 0xc1, 0x57, 0xd0, 0x51, 0xbd, 0xe1, 0x1a, 0x5b, 0x74, 0x81,
0x9d, 0x3e, 0xb4, 0x87, 0xd7, 0xe9, 0xf7, 0xa3, 0x71, 0x0d, 0x4e, 0x46, 0x7e, 0x0f, 0xf7, 0xa3, 0xea, 0x4d, 0xd3, 0xe8, 0x50, 0xff, 0x36, 0xb7, 0xc0, 0x53, 0xc8, 0xdb, 0x81, 0xf9, 0xe8, 0x5c,
0x42, 0x65, 0x8a, 0x85, 0xde, 0xb9, 0x48, 0x3b, 0x91, 0xa8, 0xa4, 0x4b, 0xf8, 0x91, 0xdd, 0x7e, 0x12, 0x01, 0x49, 0xe6, 0x53, 0xae, 0xd3, 0x87, 0xf6, 0xf1, 0x3a, 0xfd, 0x61, 0x34, 0xae, 0xc3,
0x36, 0xfd, 0x71, 0x1e, 0x15, 0x83, 0xe0, 0x83, 0x4d, 0x84, 0xea, 0xfe, 0x02, 0xf7, 0xaf, 0x7d, 0xc9, 0xc8, 0xef, 0xe1, 0x7e, 0x54, 0xac, 0x4e, 0xb1, 0xd0, 0x3b, 0x17, 0x69, 0x27, 0x0a, 0x95,
0x1e, 0xce, 0xee, 0x29, 0x41, 0x90, 0x08, 0xe3, 0x71, 0xd0, 0x64, 0x93, 0x88, 0x08, 0x88, 0xc8, 0x72, 0x09, 0x3f, 0xb2, 0xd7, 0xaf, 0xad, 0xdf, 0x2a, 0xa0, 0x52, 0x10, 0x7c, 0xb0, 0x85, 0x50,
0x45, 0x08, 0x20, 0x96, 0x33, 0xe8, 0x59, 0x6e, 0x02, 0xb0, 0x8b, 0x35, 0x1f, 0x81, 0x84, 0x60, 0xc3, 0x5f, 0xe0, 0xfe, 0xb5, 0xcf, 0xe3, 0xd9, 0x3d, 0x25, 0x08, 0x12, 0x61, 0x3c, 0x0e, 0x9a,
0xb8, 0x09, 0x87, 0xe2, 0xc0, 0x67, 0x06, 0x8d, 0x48, 0xde, 0xe1, 0x57, 0x82, 0x21, 0x31, 0x58, 0x1c, 0x12, 0x11, 0x01, 0x11, 0xb9, 0x04, 0x01, 0xc4, 0x76, 0x07, 0x3d, 0xcb, 0x4d, 0x00, 0x76,
0x16, 0x16, 0x3c, 0xaf, 0x12, 0x07, 0xbc, 0x20, 0x2c, 0x78, 0x2e, 0x48, 0x44, 0x2f, 0x9e, 0x85, 0xa9, 0xee, 0x23, 0x90, 0x10, 0x0c, 0xb7, 0xe0, 0x50, 0x1c, 0xf8, 0xcc, 0xa0, 0x11, 0x49, 0x1c,
0xa1, 0xba, 0xf5, 0x3a, 0xa5, 0x0d, 0xda, 0x10, 0x07, 0xb7, 0x83, 0x82, 0xb4, 0x58, 0xf3, 0x3b, 0x7e, 0x15, 0x18, 0x12, 0x83, 0x65, 0x61, 0x41, 0x78, 0x95, 0x3c, 0xe0, 0x05, 0x61, 0x41, 0xb8,
0x48, 0x48, 0xc3, 0x80, 0xd7, 0x35, 0x9d, 0xbd, 0x04, 0x8f, 0xc8, 0xc0, 0x4b, 0xbc, 0x95, 0x88, 0x20, 0x91, 0xbd, 0x78, 0x16, 0x86, 0xea, 0x35, 0x1a, 0x94, 0x36, 0x69, 0x53, 0x1e, 0xdc, 0x0e,
0x5e, 0xf5, 0xaf, 0x39, 0x34, 0x21, 0xf9, 0x1f, 0xfe, 0x92, 0xc2, 0x2e, 0x12, 0x9c, 0xfa, 0x06, 0x4b, 0xd2, 0x52, 0xdd, 0xef, 0x20, 0x21, 0x0d, 0x03, 0x5e, 0xd7, 0x0d, 0xf6, 0x80, 0x3c, 0xa2,
0x6f, 0xf6, 0x27, 0x72, 0x65, 0x27, 0x3e, 0x5d, 0x5e, 0x09, 0xf1, 0xbc, 0xa7, 0xba, 0xc8, 0xbd, 0x02, 0x2f, 0xf1, 0x56, 0x22, 0x7b, 0xb5, 0xdf, 0xe6, 0xd1, 0x84, 0xe2, 0x7f, 0xf8, 0x3f, 0x72,
0x44, 0xd0, 0x43, 0xa2, 0x62, 0xf1, 0xeb, 0x90, 0xe0, 0xf2, 0xef, 0xc5, 0xed, 0x0e, 0xcb, 0x1c, 0xec, 0x22, 0xc1, 0x6d, 0x6c, 0xf0, 0x66, 0x7f, 0x22, 0x57, 0x76, 0xe3, 0xd3, 0x95, 0x95, 0x10,
0x22, 0x4f, 0x88, 0xe7, 0x76, 0xa2, 0x0b, 0xa1, 0x2f, 0xbb, 0x70, 0x52, 0xe6, 0xf7, 0xd1, 0x41, 0x4f, 0x3c, 0xd5, 0x45, 0xee, 0x25, 0x82, 0x1e, 0x12, 0x15, 0x8b, 0xff, 0x1b, 0x12, 0x5c, 0xfe,
0xa2, 0xbb, 0x12, 0x13, 0x44, 0x7a, 0x44, 0xcf, 0x9c, 0x45, 0x53, 0xf1, 0x51, 0x64, 0x7a, 0xb2, 0xbd, 0xb8, 0xdd, 0x65, 0x99, 0x43, 0xe4, 0x09, 0xf1, 0xc2, 0x6e, 0x74, 0x21, 0xf4, 0x75, 0x0f,
0xfb, 0xb6, 0x82, 0x4a, 0x69, 0x8a, 0xb0, 0x53, 0x6c, 0x00, 0x14, 0x66, 0x87, 0x4f, 0xd2, 0xae, 0x4e, 0xca, 0xfc, 0x3e, 0x3a, 0x48, 0x74, 0x57, 0x62, 0x82, 0x48, 0x8f, 0xe8, 0x99, 0xf3, 0x68,
0x87, 0xba, 0x88, 0x0a, 0x66, 0x87, 0xdd, 0x62, 0x88, 0x17, 0xbb, 0x62, 0xe5, 0x5e, 0x7f, 0x55, 0x2a, 0x3e, 0x8a, 0x4c, 0x4f, 0x76, 0x5f, 0xca, 0xa1, 0x72, 0x9a, 0x22, 0xec, 0x14, 0x1b, 0x00,
0x5e, 0x12, 0xed, 0xb0, 0xf7, 0x1e, 0x96, 0xe0, 0xfd, 0x0e, 0x12, 0xb0, 0x62, 0x15, 0x8d, 0x70, 0x85, 0xd9, 0xe1, 0xb3, 0x74, 0x47, 0xa0, 0x2e, 0xa2, 0xa2, 0xd5, 0x65, 0xb7, 0x18, 0xf2, 0xc5,
0x7d, 0xbc, 0x2c, 0xb3, 0x58, 0x41, 0xcc, 0x1f, 0x78, 0x7e, 0x0d, 0x5b, 0xb1, 0xd7, 0xc3, 0x0b, 0xae, 0x54, 0x7d, 0xd0, 0x5f, 0x95, 0x57, 0x64, 0x3b, 0xec, 0xbd, 0x47, 0x15, 0x78, 0xbf, 0x83,
0x56, 0x2e, 0x52, 0xe7, 0x15, 0xd3, 0xda, 0xac, 0x9a, 0x86, 0x5e, 0xef, 0xee, 0x61, 0x46, 0xb5, 0x04, 0xac, 0x58, 0x43, 0x23, 0x5c, 0x1f, 0x91, 0x65, 0x96, 0xaa, 0x88, 0xf9, 0x03, 0xcf, 0xaf,
0x26, 0x65, 0x54, 0x8f, 0x67, 0x9c, 0x55, 0x49, 0xcb, 0xb4, 0xdc, 0x4a, 0xfd, 0x0b, 0x98, 0x5d, 0x61, 0x2b, 0x16, 0x3d, 0xbc, 0xce, 0xe5, 0x32, 0x75, 0xdf, 0xb0, 0xec, 0xcd, 0x9a, 0x65, 0x1a,
0xa2, 0x8c, 0x1e, 0xb3, 0x28, 0x1a, 0x66, 0x8f, 0x07, 0xbe, 0x8f, 0xef, 0x48, 0x03, 0x76, 0x26, 0x8d, 0x9d, 0x7d, 0xcc, 0xa8, 0xd6, 0x94, 0x8c, 0xea, 0xe9, 0x8c, 0xb3, 0xaa, 0x68, 0x99, 0x96,
0x8d, 0xdc, 0x52, 0x33, 0x58, 0xe2, 0xa1, 0xb3, 0x71, 0xae, 0x5b, 0x66, 0x4b, 0x78, 0xef, 0xce, 0x5b, 0x69, 0xbf, 0x01, 0xb3, 0x2b, 0x94, 0xd1, 0x63, 0x16, 0x45, 0xc3, 0xec, 0xf1, 0xc0, 0xf7,
0xa4, 0x50, 0x6a, 0x85, 0xe3, 0x5c, 0x02, 0x54, 0xc2, 0xb1, 0xd5, 0xdf, 0x2a, 0xe8, 0xa0, 0x44, 0xf1, 0x5d, 0x69, 0xc0, 0xce, 0xa4, 0x91, 0x5b, 0x6a, 0x06, 0x4b, 0x04, 0x3a, 0x1b, 0xe7, 0xba,
0xb9, 0x1f, 0x69, 0x81, 0x26, 0xa7, 0x05, 0x8f, 0xec, 0x64, 0x64, 0x29, 0x09, 0xc2, 0x57, 0x72, 0x6d, 0xb5, 0xa5, 0xf7, 0xee, 0x4e, 0x0a, 0xa5, 0x76, 0x38, 0xce, 0x25, 0x40, 0x25, 0x1c, 0x5b,
0xb1, 0x71, 0x31, 0x0b, 0xc0, 0x56, 0x33, 0xd6, 0x31, 0x1b, 0xb5, 0xdd, 0xac, 0x3b, 0xf2, 0x12, 0xfb, 0x69, 0x0e, 0x1d, 0x56, 0x28, 0x0f, 0x22, 0x2d, 0xd0, 0xd5, 0xb4, 0xe0, 0x89, 0xdd, 0x8c,
0x8d, 0x10, 0x94, 0x44, 0x25, 0xe0, 0x2f, 0x80, 0x79, 0x59, 0x6d, 0x83, 0xdd, 0xd1, 0xea, 0xb4, 0x2c, 0x25, 0x41, 0xf8, 0xaf, 0x7c, 0x6c, 0x5c, 0xcc, 0x02, 0xb0, 0xd5, 0x8c, 0x75, 0xad, 0x66,
0xb6, 0x9b, 0xaf, 0xe7, 0x87, 0xd9, 0xf3, 0xe1, 0xc5, 0x38, 0x34, 0xe9, 0x95, 0xa6, 0xfe, 0x30, 0x7d, 0x2f, 0xcb, 0x95, 0x44, 0xa2, 0x11, 0x82, 0x92, 0xa8, 0x04, 0xfc, 0x6f, 0x60, 0x5e, 0x56,
0x3e, 0xc5, 0xcc, 0xc9, 0xf0, 0x53, 0xa8, 0xc0, 0x0b, 0x4d, 0xeb, 0xa6, 0x21, 0xe2, 0xc7, 0x03, 0xdb, 0xe0, 0x74, 0xf5, 0x06, 0xad, 0xef, 0xe5, 0xeb, 0xf9, 0x51, 0xf6, 0x7c, 0x78, 0x39, 0x0e,
0x6c, 0xb6, 0xaa, 0xa2, 0x0d, 0xe2, 0xc2, 0xff, 0xf4, 0xcd, 0xc9, 0x7d, 0x42, 0x12, 0xc0, 0xe0, 0x4d, 0x7a, 0xa5, 0x69, 0xdf, 0x88, 0x4f, 0x31, 0x73, 0x32, 0xfc, 0x1c, 0x2a, 0xf2, 0xfa, 0xd4,
0x65, 0x34, 0xd4, 0x19, 0xfc, 0xe6, 0x86, 0x1f, 0xd5, 0xf9, 0x75, 0x0d, 0x47, 0x51, 0xff, 0x11, 0x86, 0x65, 0xca, 0xf8, 0xf1, 0x08, 0x9b, 0xad, 0x9a, 0x6c, 0x83, 0xb8, 0xf0, 0x37, 0x7d, 0x73,
0x57, 0x9b, 0x27, 0x7b, 0xf6, 0xee, 0xcf, 0x60, 0xb0, 0xa7, 0xa4, 0xce, 0xa2, 0x85, 0x46, 0xc5, 0x72, 0x9f, 0x90, 0x04, 0x30, 0x78, 0x19, 0x0d, 0x75, 0x07, 0xbf, 0xb9, 0xe1, 0x47, 0x75, 0x7e,
0x05, 0xc6, 0x80, 0x3b, 0x49, 0x5a, 0x24, 0x09, 0xb3, 0x74, 0xbf, 0xd1, 0x17, 0xc4, 0x17, 0x26, 0x5d, 0xc3, 0x51, 0xb4, 0x3f, 0xc4, 0xd5, 0xe6, 0xc9, 0x9e, 0xb3, 0xf7, 0x33, 0x18, 0xec, 0x29,
0x57, 0xa8, 0xee, 0x5a, 0xba, 0xd3, 0xdd, 0xf3, 0xa0, 0xba, 0x2e, 0x05, 0xd5, 0x85, 0x8c, 0x03, 0xa9, 0xb3, 0x68, 0xa3, 0x51, 0x79, 0x81, 0x31, 0xe0, 0x4e, 0x92, 0x16, 0x49, 0xc2, 0x2c, 0xdd,
0xec, 0xd1, 0x34, 0x35, 0xb0, 0xfe, 0x51, 0x41, 0x87, 0x7b, 0xa8, 0xf7, 0x23, 0xe8, 0x50, 0x39, 0x6f, 0xf4, 0x05, 0xf1, 0x85, 0xc9, 0x15, 0x6a, 0x78, 0xb6, 0xe1, 0xee, 0xec, 0x7b, 0x50, 0x5d,
0xe8, 0x3c, 0xbe, 0xd3, 0x11, 0xa6, 0x04, 0x9e, 0x6b, 0x28, 0x61, 0x7c, 0xdc, 0x75, 0x4f, 0x21, 0x57, 0x82, 0xea, 0x42, 0xc6, 0x01, 0xf6, 0x68, 0x9a, 0x1a, 0x58, 0x7f, 0x99, 0x43, 0x47, 0x7b,
0xd4, 0xb1, 0xf4, 0x2d, 0x48, 0x9f, 0x9a, 0xa2, 0x18, 0xb0, 0x10, 0xce, 0x49, 0x35, 0xe8, 0x21, 0xa8, 0x0f, 0x22, 0xe8, 0x50, 0x35, 0xe8, 0x3c, 0xbd, 0xdb, 0x11, 0xa6, 0x04, 0x9e, 0x1b, 0x28,
0x11, 0x2a, 0xfc, 0x39, 0x56, 0xa8, 0xb7, 0xae, 0xb9, 0x86, 0x33, 0xd7, 0x68, 0xcc, 0x6b, 0x1d, 0x61, 0x7c, 0xdc, 0x75, 0xcf, 0x20, 0xd4, 0xb5, 0x8d, 0x2d, 0x48, 0x9f, 0x5a, 0xb2, 0x86, 0xb0,
0x6d, 0x4d, 0x37, 0x20, 0x8b, 0x15, 0xaf, 0xc6, 0xc5, 0xca, 0xa2, 0x57, 0xa4, 0x97, 0x44, 0x01, 0x18, 0xce, 0x49, 0x2d, 0xe8, 0x21, 0x11, 0x2a, 0xfc, 0x2f, 0xac, 0xbe, 0x6f, 0x5d, 0xf7, 0x4c,
0x2b, 0xf8, 0xee, 0xfe, 0xa7, 0x6a, 0x9f, 0xb8, 0x4b, 0x52, 0x84, 0xe0, 0x2f, 0xc2, 0x2e, 0x68, 0x77, 0xae, 0xd9, 0x9c, 0xd7, 0xbb, 0xfa, 0x9a, 0x61, 0x42, 0x16, 0x2b, 0x5f, 0x8d, 0x4b, 0xd5,
0x79, 0xf9, 0x46, 0x63, 0xc1, 0x32, 0x3b, 0x92, 0x06, 0x5e, 0x32, 0x70, 0x0e, 0x34, 0x28, 0x91, 0x45, 0x51, 0xdb, 0x97, 0x44, 0x01, 0x2b, 0xf8, 0xfe, 0xfe, 0xa7, 0x6a, 0x9f, 0x78, 0x87, 0xa4,
0x14, 0x9a, 0x2c, 0x3a, 0xa4, 0x0a, 0xc2, 0x0e, 0x3a, 0x04, 0x27, 0x37, 0xf3, 0x15, 0x2a, 0x5b, 0x08, 0xc1, 0xff, 0x0e, 0xbb, 0xa0, 0x2d, 0xf2, 0x8d, 0xe6, 0x82, 0x6d, 0x75, 0x15, 0x0d, 0x44,
0x60, 0x88, 0xcb, 0xaf, 0xb0, 0xda, 0x87, 0xb9, 0xde, 0xee, 0x2c, 0xa2, 0x93, 0xe0, 0x21, 0x75, 0x32, 0x70, 0x01, 0x34, 0x28, 0x93, 0x14, 0x9a, 0x2c, 0x3a, 0xa4, 0x0a, 0xc2, 0x2e, 0x3a, 0x02,
0x1e, 0xdd, 0x32, 0x0d, 0x17, 0xa2, 0x29, 0x24, 0xce, 0x4c, 0x12, 0x8b, 0xb8, 0xa3, 0x57, 0xbc, 0x27, 0x37, 0xeb, 0x0d, 0xaa, 0x5a, 0x60, 0x88, 0xcb, 0xaf, 0xb2, 0xda, 0x87, 0xb9, 0xde, 0xee,
0xa6, 0x4f, 0x58, 0x46, 0x5c, 0xe3, 0x57, 0x1c, 0x3e, 0x15, 0xbb, 0xf6, 0x66, 0xf7, 0x50, 0x62, 0x2c, 0xa2, 0x93, 0xe0, 0x21, 0x75, 0x1e, 0xdd, 0xb2, 0x4c, 0x0f, 0xa2, 0x29, 0x24, 0xce, 0x4c,
0xad, 0xf3, 0xfc, 0xb9, 0x10, 0x06, 0x97, 0xf3, 0x61, 0x17, 0x89, 0xd2, 0xe1, 0x16, 0x2a, 0x6e, 0x12, 0x8b, 0xb8, 0xa3, 0xd7, 0x44, 0xd3, 0xe7, 0x2c, 0x23, 0xae, 0xf3, 0x2b, 0x0e, 0x9f, 0x8a,
0x88, 0x27, 0x10, 0xbb, 0x34, 0x3a, 0xd0, 0x86, 0x28, 0x3d, 0xa1, 0x84, 0x09, 0xbe, 0xdf, 0x6c, 0x5d, 0x7b, 0xb3, 0x7b, 0x28, 0xb9, 0xd6, 0x79, 0xfe, 0x5c, 0x0c, 0x83, 0xcb, 0xc5, 0xb0, 0x8b,
0x93, 0x50, 0x02, 0xbb, 0x28, 0xe0, 0x1f, 0x17, 0x16, 0x78, 0x4d, 0x4f, 0x21, 0x0c, 0x41, 0xe7, 0x44, 0xe9, 0x70, 0x1b, 0x95, 0x36, 0xe4, 0x13, 0x88, 0x53, 0x1e, 0x1d, 0x68, 0x43, 0x54, 0x9e,
0xbd, 0x66, 0xe2, 0xf7, 0xfb, 0xa4, 0x17, 0xaa, 0xf3, 0xa5, 0x62, 0x2f, 0x29, 0x34, 0x13, 0xbf, 0x50, 0xc2, 0x04, 0xdf, 0x6f, 0x76, 0x48, 0x28, 0x81, 0x5d, 0x14, 0xf0, 0x8f, 0x4b, 0x0b, 0xbc,
0x1f, 0x77, 0xd0, 0xa8, 0x4d, 0x97, 0xf5, 0xb6, 0xbb, 0x5d, 0x42, 0x7c, 0xe9, 0x2e, 0x66, 0x7d, 0xa6, 0xa7, 0x18, 0x86, 0xa0, 0x8b, 0xa2, 0x99, 0xf8, 0xfd, 0x3e, 0xe9, 0xa5, 0xda, 0x7c, 0xb9,
0xe9, 0x5c, 0xe4, 0xdc, 0xb1, 0xf2, 0x8a, 0x50, 0xa2, 0xe8, 0x27, 0xbe, 0x18, 0xbc, 0x8d, 0x8a, 0xd4, 0x4b, 0x0a, 0xcd, 0xc4, 0xef, 0xc7, 0x5d, 0x34, 0xea, 0xd0, 0x65, 0xa3, 0xe3, 0x6d, 0x97,
0x96, 0xdb, 0x9e, 0xb3, 0x2f, 0xdb, 0xd4, 0x2a, 0x8d, 0x71, 0x99, 0x59, 0xa3, 0x32, 0xf1, 0xf9, 0x11, 0x5f, 0xba, 0x8b, 0x59, 0x5f, 0x3a, 0x17, 0x39, 0x77, 0xac, 0xbc, 0x22, 0x94, 0x28, 0xfb,
0xe3, 0x52, 0x03, 0x0b, 0x06, 0x14, 0x24, 0x14, 0x86, 0xbf, 0xa1, 0x20, 0x6c, 0xbb, 0x1d, 0x38, 0x89, 0x2f, 0x06, 0x6f, 0xa3, 0x92, 0xed, 0x75, 0xe6, 0x9c, 0xab, 0x0e, 0xb5, 0xcb, 0x63, 0x5c,
0x8e, 0xb1, 0x1c, 0x5c, 0x33, 0x78, 0x85, 0x87, 0x5d, 0x1a, 0xe7, 0x3a, 0x54, 0x33, 0xbf, 0xf0, 0x66, 0xd6, 0xa8, 0x4c, 0x7c, 0xfe, 0xb8, 0xd4, 0xc0, 0x82, 0x01, 0x05, 0x09, 0x85, 0xe1, 0xff,
0xc6, 0x81, 0xe2, 0xca, 0x04, 0x37, 0x46, 0xbd, 0xa4, 0x24, 0x41, 0x0f, 0x36, 0x15, 0xeb, 0x36, 0xcf, 0x21, 0xec, 0x78, 0x5d, 0x38, 0x8e, 0xb1, 0x1c, 0x5c, 0x37, 0x79, 0x85, 0x87, 0x53, 0x1e,
0xff, 0x7f, 0x69, 0x62, 0xa0, 0xa9, 0x48, 0xae, 0x74, 0x09, 0xa7, 0x42, 0xf4, 0x13, 0x5f, 0x0c, 0xe7, 0x3a, 0xd4, 0x32, 0xbf, 0xf0, 0xc6, 0x81, 0xe2, 0xca, 0x04, 0x37, 0x46, 0xbd, 0xa4, 0x24,
0xab, 0x26, 0xb6, 0xa8, 0xd6, 0xb8, 0xd4, 0x36, 0xba, 0xc4, 0x34, 0x9d, 0x25, 0x88, 0x5d, 0x76, 0x41, 0x0f, 0x36, 0x15, 0xeb, 0x0e, 0xff, 0x7f, 0x79, 0x62, 0xa0, 0xa9, 0x48, 0xae, 0x74, 0x09,
0xd7, 0x86, 0x68, 0x58, 0x9a, 0xe4, 0x6e, 0x13, 0x54, 0x13, 0x93, 0x44, 0x2a, 0x92, 0xc2, 0xcd, 0xa7, 0x42, 0xf6, 0x13, 0x5f, 0x0c, 0x2b, 0x42, 0xb6, 0xa9, 0xde, 0xbc, 0xd2, 0x31, 0x77, 0x88,
0xab, 0x89, 0xc5, 0xc3, 0xe4, 0xde, 0xfe, 0x6a, 0x60, 0x67, 0xd5, 0xc4, 0xa1, 0x8a, 0x7b, 0x56, 0x65, 0xb9, 0x4b, 0x10, 0xbb, 0x9c, 0x1d, 0x07, 0xa2, 0x61, 0x79, 0x92, 0xbb, 0x4d, 0x50, 0x84,
0x4d, 0x1c, 0x11, 0xd1, 0xff, 0xc2, 0xf6, 0xc3, 0x3c, 0x3a, 0x14, 0x12, 0x87, 0xf7, 0xb6, 0x0f, 0x4c, 0x12, 0xa9, 0x48, 0x0a, 0x37, 0xaf, 0x26, 0x96, 0x0f, 0x93, 0xfb, 0xfb, 0x63, 0x83, 0xdd,
0x4b, 0xf7, 0xb6, 0x77, 0xc7, 0xee, 0x6d, 0x8f, 0x26, 0xb0, 0xfc, 0xf7, 0xfa, 0xf6, 0x5f, 0xf4, 0x55, 0x13, 0x87, 0x2a, 0xee, 0x5b, 0x35, 0x71, 0x44, 0x44, 0xff, 0x0b, 0xdb, 0x4f, 0x0a, 0xe8,
0xfa, 0x96, 0x15, 0x8c, 0x87, 0xf3, 0xf5, 0x6f, 0x50, 0x30, 0x1e, 0x2a, 0x9b, 0x92, 0x32, 0xbd, 0x48, 0x48, 0x1c, 0xde, 0xdb, 0x3e, 0xae, 0xdc, 0xdb, 0xde, 0x1f, 0xbb, 0xb7, 0x3d, 0x9e, 0xc0,
0x9b, 0x8b, 0x8e, 0xe8, 0x3f, 0xb1, 0x2a, 0x39, 0xa1, 0x48, 0x78, 0x28, 0x5b, 0x91, 0xb0, 0xfa, 0xf2, 0xd7, 0xeb, 0xdb, 0x3f, 0xd1, 0xeb, 0x5b, 0x56, 0x30, 0x1e, 0xce, 0xd7, 0x9f, 0x41, 0xc1,
0x87, 0x3c, 0x9a, 0x8a, 0x87, 0x09, 0xa9, 0xe6, 0x55, 0xb9, 0x6e, 0xcd, 0x6b, 0x15, 0x4d, 0xaf, 0x78, 0xa8, 0x6c, 0x4a, 0xca, 0xf4, 0x41, 0x3e, 0x3a, 0xa2, 0xbf, 0xc4, 0xaa, 0xe4, 0x84, 0x22,
0xbb, 0x86, 0xd1, 0xe5, 0x06, 0x89, 0xd4, 0x90, 0x78, 0xd7, 0xe3, 0xb7, 0x0a, 0xce, 0xe9, 0xa5, 0xe1, 0xa1, 0x6c, 0x45, 0xc2, 0xda, 0x2f, 0x0a, 0x68, 0x2a, 0x1e, 0x26, 0x94, 0x9a, 0xd7, 0xdc,
0x04, 0x1a, 0x92, 0xc8, 0x99, 0x52, 0xbf, 0x9b, 0x1f, 0xa8, 0x7e, 0xf7, 0x61, 0x34, 0xc1, 0xf6, 0x4d, 0x6b, 0x5e, 0x6b, 0x68, 0x7a, 0xdd, 0x33, 0xcd, 0x1d, 0x6e, 0x90, 0x48, 0x0d, 0x89, 0xb8,
0x89, 0x6e, 0xac, 0xb4, 0x25, 0x08, 0x00, 0x24, 0xda, 0x49, 0x64, 0xda, 0xe4, 0x5a, 0xdc, 0xe1, 0x1e, 0xbf, 0x53, 0x72, 0x4e, 0x2f, 0x25, 0xd0, 0x90, 0x44, 0xce, 0x94, 0xfa, 0xdd, 0xc2, 0x40,
0x01, 0x6a, 0x71, 0xb7, 0xa4, 0xcb, 0xea, 0x11, 0xbe, 0x20, 0x2a, 0x03, 0x2f, 0x88, 0x1b, 0xbe, 0xf5, 0xbb, 0x8f, 0xa3, 0x09, 0x9b, 0xff, 0xe2, 0x44, 0x2d, 0x6d, 0x09, 0x02, 0x00, 0x89, 0x76,
0xb3, 0x56, 0x6f, 0x45, 0x33, 0x82, 0x8d, 0x7d, 0x03, 0x91, 0xc3, 0x0a, 0x60, 0xa9, 0xb5, 0xe0, 0x12, 0x95, 0x36, 0xb9, 0x16, 0x77, 0x78, 0x80, 0x5a, 0xdc, 0x2d, 0xe5, 0xb2, 0x7a, 0x84, 0x2f,
0xb6, 0x5a, 0x5d, 0xf5, 0x2c, 0x2c, 0x20, 0xa9, 0xd4, 0xda, 0x9b, 0x79, 0xaf, 0xfa, 0x5b, 0xd4, 0x88, 0xea, 0xc0, 0x0b, 0xe2, 0x96, 0xef, 0xac, 0xb5, 0x3b, 0xd1, 0x8c, 0x64, 0x63, 0xdf, 0x40,
0xc0, 0x44, 0x66, 0xde, 0x6b, 0x27, 0x01, 0x85, 0xfa, 0x81, 0x82, 0x8e, 0xa6, 0x14, 0xdf, 0xe2, 0xe4, 0xb2, 0x02, 0x58, 0x6a, 0x2f, 0x78, 0xed, 0xf6, 0x8e, 0x76, 0x1e, 0x16, 0x90, 0x52, 0x6a,
0xab, 0x68, 0xb2, 0xa5, 0x6d, 0x47, 0xaa, 0x8b, 0x45, 0x88, 0xc9, 0x7a, 0xbe, 0xe7, 0xd7, 0xda, 0x2d, 0x66, 0x5e, 0x54, 0x7f, 0xcb, 0x1a, 0x98, 0xc8, 0xcc, 0x8b, 0x76, 0x12, 0x50, 0x68, 0x1f,
0x2b, 0x12, 0x12, 0x89, 0x21, 0xf3, 0x2d, 0x5e, 0xdb, 0xae, 0xb9, 0x56, 0x93, 0x0e, 0x78, 0x8b, 0xe7, 0xd0, 0xf1, 0x94, 0xe2, 0x5b, 0x7c, 0x1d, 0x4d, 0xb6, 0xf5, 0xed, 0x48, 0x75, 0xb1, 0x0c,
0xc0, 0x97, 0xef, 0x8a, 0xc0, 0x20, 0x01, 0x1a, 0x2b, 0xe1, 0x2d, 0xa5, 0xe5, 0x7b, 0x90, 0xb9, 0x31, 0x59, 0xcf, 0xf7, 0xfc, 0x5a, 0x7b, 0x45, 0x41, 0x22, 0x31, 0x64, 0xbe, 0xc5, 0xeb, 0xdb,
0x47, 0x8b, 0x78, 0xef, 0x88, 0x15, 0xf1, 0x1e, 0xec, 0xe1, 0xdb, 0xa7, 0x12, 0xde, 0x77, 0x14, 0x75, 0xcf, 0x6e, 0xd1, 0x01, 0x6f, 0x11, 0xf8, 0xf2, 0x5d, 0x91, 0x18, 0x24, 0x40, 0x63, 0x25,
0x74, 0x24, 0x39, 0x2f, 0xc6, 0xff, 0x2f, 0x69, 0x7c, 0x3c, 0xa6, 0xf1, 0x81, 0x18, 0x97, 0xd0, 0xbc, 0xe5, 0xb4, 0x7c, 0x0f, 0x32, 0xf7, 0x68, 0x11, 0xef, 0x3d, 0xb1, 0x22, 0xde, 0xc3, 0x3d,
0x77, 0x03, 0x4d, 0x8a, 0xec, 0x59, 0xc0, 0xdc, 0xc0, 0x2f, 0x4d, 0xb7, 0x82, 0xd4, 0xdc, 0xcf, 0x7c, 0x07, 0x54, 0xc2, 0xfb, 0x7e, 0x0e, 0x1d, 0x4b, 0xce, 0x8b, 0xf1, 0xdf, 0x2b, 0x1a, 0x9f,
0x03, 0xf9, 0x3c, 0xca, 0x6d, 0x24, 0x86, 0xab, 0x7e, 0x2b, 0x87, 0x86, 0x79, 0x65, 0xdb, 0x1e, 0x8c, 0x69, 0x7c, 0x28, 0xc6, 0x25, 0xf5, 0xdd, 0x40, 0x93, 0x32, 0x7b, 0x96, 0x30, 0xb7, 0xf0,
0x26, 0x6d, 0xcf, 0x4a, 0x49, 0x5b, 0xd6, 0xb7, 0x6f, 0xae, 0x5d, 0x6a, 0xbe, 0xb6, 0x16, 0xcb, 0x03, 0xd5, 0xad, 0x20, 0x35, 0xf7, 0xf3, 0x40, 0x3e, 0x8f, 0x6a, 0x1b, 0x89, 0xe1, 0x6a, 0x5f,
0xd7, 0xce, 0x0c, 0x84, 0xde, 0x3f, 0x55, 0x7b, 0x08, 0x15, 0x03, 0x25, 0xb2, 0x05, 0x6a, 0x96, 0xcc, 0xa3, 0x61, 0x5e, 0xd9, 0xb6, 0x8f, 0x49, 0xdb, 0x8b, 0x4a, 0xd2, 0x96, 0xf5, 0xed, 0x9b,
0x18, 0x8f, 0x45, 0x44, 0x64, 0x0c, 0xf3, 0x5b, 0xd2, 0x8e, 0x39, 0xc8, 0x4f, 0xa2, 0x23, 0xb2, 0x6b, 0x97, 0x9a, 0xaf, 0xad, 0xc5, 0xf2, 0xb5, 0x73, 0x03, 0xa1, 0xf7, 0x4f, 0xd5, 0x1e, 0x43,
0xcb, 0xfe, 0x56, 0xe9, 0xbd, 0xcf, 0x84, 0xb5, 0xa9, 0xbd, 0x3b, 0x28, 0x04, 0x29, 0xef, 0x77, 0xa5, 0x40, 0x89, 0x6c, 0x81, 0x9a, 0x25, 0xc6, 0x63, 0x11, 0x11, 0x19, 0xc3, 0xfc, 0x96, 0xb2,
0xe5, 0xc1, 0xed, 0x5d, 0x9e, 0x7b, 0xef, 0x11, 0xc1, 0x33, 0xb9, 0x2a, 0xf5, 0x92, 0x18, 0xf5, 0x63, 0x0e, 0xf2, 0x4b, 0xea, 0x88, 0xec, 0x8a, 0xbf, 0x55, 0x8a, 0xf7, 0x99, 0xb0, 0x36, 0xb5,
0x0c, 0x6c, 0x00, 0x92, 0xb0, 0x4c, 0xcf, 0x28, 0x3f, 0x55, 0xd0, 0x74, 0x52, 0x35, 0x2d, 0x2b, 0x77, 0x07, 0x85, 0x20, 0x25, 0x7e, 0x8e, 0x1e, 0xdc, 0xde, 0x15, 0xb8, 0xf7, 0x1e, 0x93, 0x3c,
0x99, 0xda, 0xd4, 0x45, 0xf9, 0x4f, 0xa4, 0x64, 0xea, 0x49, 0x68, 0x23, 0xbc, 0x27, 0xf8, 0xe1, 0x93, 0xab, 0x4a, 0x2f, 0x89, 0x51, 0xcf, 0xc0, 0x06, 0xa0, 0x08, 0xcb, 0xf4, 0x8c, 0xf2, 0xdd,
0x5a, 0x2e, 0xf5, 0x87, 0x6b, 0xa7, 0x10, 0x02, 0x53, 0x89, 0xdf, 0xea, 0x8b, 0x51, 0x05, 0xce, 0x1c, 0x9a, 0x4e, 0xaa, 0xa6, 0x65, 0x25, 0x53, 0x9b, 0x86, 0x2c, 0xff, 0x89, 0x94, 0x4c, 0x3d,
0x1b, 0xfe, 0x8a, 0x9f, 0x44, 0xa8, 0x78, 0x91, 0x5c, 0xa8, 0x0f, 0xdf, 0xcc, 0xa2, 0x45, 0x72, 0x0b, 0x6d, 0x84, 0xf7, 0x04, 0x3f, 0x5c, 0xcb, 0xa7, 0xfe, 0x70, 0xed, 0x0c, 0x42, 0x60, 0x2a,
0x11, 0x55, 0xa3, 0x74, 0xea, 0xcf, 0x14, 0x74, 0xc7, 0x75, 0xcf, 0x8c, 0xb8, 0x22, 0x85, 0x87, 0xf9, 0x13, 0x7f, 0x39, 0xaa, 0xc0, 0x79, 0xc3, 0x1f, 0xff, 0x93, 0x08, 0x15, 0x2f, 0x92, 0x0b,
0x72, 0x2c, 0x3c, 0x1c, 0x4b, 0x07, 0xd8, 0xc7, 0x1f, 0x28, 0xbc, 0x91, 0x43, 0x78, 0x75, 0x43, 0xf5, 0xe1, 0x9b, 0x59, 0xb4, 0x48, 0x2e, 0xa2, 0x6a, 0x94, 0x4e, 0xfb, 0x5e, 0x0e, 0xdd, 0x73,
0xb7, 0x1a, 0x55, 0xcd, 0x72, 0x60, 0xa7, 0xf6, 0x06, 0xb8, 0x87, 0x01, 0x03, 0x2c, 0xde, 0xa0, 0xd3, 0x33, 0x23, 0xae, 0x2a, 0xe1, 0xa1, 0x12, 0x0b, 0x0f, 0x27, 0xd2, 0x01, 0x0e, 0xf0, 0x07,
0x76, 0xdd, 0xd2, 0xb9, 0x91, 0xc4, 0x74, 0x06, 0x16, 0x5f, 0x08, 0xbb, 0x48, 0x94, 0x0e, 0xce, 0x0a, 0x6f, 0xe7, 0x11, 0x5e, 0xdd, 0x30, 0xec, 0x66, 0x4d, 0xb7, 0x5d, 0xd8, 0xa9, 0xc5, 0x00,
0x6e, 0x05, 0x91, 0x2f, 0xfb, 0x55, 0x56, 0x59, 0x13, 0xe0, 0xd0, 0x03, 0xc2, 0xf5, 0x21, 0x1a, 0xf7, 0x31, 0x60, 0x80, 0xc5, 0x9b, 0xd4, 0x69, 0xd8, 0x06, 0x37, 0x92, 0x9c, 0xce, 0xc0, 0xe2,
0x60, 0x5d, 0xfa, 0xe0, 0xea, 0x9b, 0x10, 0xee, 0x7b, 0x0d, 0xb2, 0xe0, 0xd5, 0x10, 0xed, 0x95, 0x0b, 0x61, 0x17, 0x89, 0xd2, 0xc1, 0xd9, 0xad, 0x28, 0xf3, 0x65, 0xbf, 0xca, 0x2a, 0x6b, 0x02,
0x51, 0x6e, 0x45, 0x43, 0x1c, 0x95, 0x59, 0x63, 0xdc, 0xbb, 0x83, 0x67, 0x12, 0x09, 0x6f, 0x55, 0x1c, 0x7a, 0x40, 0xb8, 0x3e, 0x64, 0x03, 0xac, 0x4b, 0x1f, 0x5c, 0x7b, 0x07, 0xc2, 0x7d, 0xaf,
0x3f, 0x56, 0xd0, 0x4c, 0xb2, 0x4a, 0xfb, 0x71, 0xee, 0xb8, 0x2a, 0x9f, 0x3b, 0xb2, 0xde, 0x63, 0x41, 0x16, 0x44, 0x0d, 0xd1, 0x7e, 0x19, 0xe5, 0x4e, 0x34, 0xc4, 0x51, 0x99, 0x35, 0xc6, 0xc5,
0x24, 0x2b, 0x9e, 0x72, 0x06, 0xf9, 0x20, 0xd1, 0xf8, 0xfb, 0x31, 0xca, 0x75, 0x79, 0x94, 0x73, 0x1d, 0x3c, 0x93, 0x48, 0x78, 0xab, 0xf6, 0x59, 0x0e, 0xcd, 0x24, 0xab, 0x74, 0x10, 0xe7, 0x8e,
0x3b, 0x1e, 0x65, 0xf2, 0x08, 0x2b, 0xf7, 0x5e, 0xfb, 0xd3, 0xb1, 0x9b, 0xde, 0x83, 0xbf, 0xdf, 0xeb, 0xea, 0xb9, 0x23, 0xeb, 0x3d, 0x46, 0xb2, 0xe2, 0x29, 0x67, 0x90, 0x8f, 0x13, 0x8d, 0x7f,
0xc3, 0xdf, 0x6b, 0x1f, 0x1d, 0x53, 0xae, 0xc1, 0xdf, 0x7b, 0xf0, 0xf7, 0x21, 0xfc, 0xbd, 0xf9, 0x10, 0xa3, 0x5c, 0x57, 0x47, 0x39, 0xb7, 0xeb, 0x51, 0x26, 0x8f, 0xb0, 0xfa, 0xe0, 0x8d, 0x5f,
0xe7, 0x63, 0x37, 0x3d, 0x3b, 0x2a, 0x30, 0xff, 0x19, 0x00, 0x00, 0xff, 0xff, 0xdd, 0x50, 0x26, 0x9d, 0xb8, 0xed, 0x43, 0xf8, 0xfb, 0x39, 0xfc, 0xbd, 0xf5, 0xe9, 0x89, 0xdc, 0x0d, 0xf8, 0xfb,
0x17, 0x14, 0x46, 0x00, 0x00, 0x10, 0xfe, 0x3e, 0x81, 0xbf, 0x77, 0x7e, 0x7d, 0xe2, 0xb6, 0x17, 0x47, 0x25, 0xe6, 0x1f, 0x03,
0x00, 0x00, 0xff, 0xff, 0x3c, 0x85, 0xb5, 0xb9, 0x4b, 0x46, 0x00, 0x00,
} }

View File

@ -127,6 +127,10 @@ message DaemonSetStatus {
// pod (including nodes correctly running the daemon pod). // pod (including nodes correctly running the daemon pod).
// More info: http://releases.k8s.io/HEAD/docs/admin/daemons.md // More info: http://releases.k8s.io/HEAD/docs/admin/daemons.md
optional int32 desiredNumberScheduled = 3; optional int32 desiredNumberScheduled = 3;
// NumberReady is the number of nodes that should be running the daemon pod and have one
// or more of the daemon pod running and ready.
optional int32 numberReady = 4;
} }
// Deployment enables declarative updates for Pods and ReplicaSets. // Deployment enables declarative updates for Pods and ReplicaSets.

File diff suppressed because it is too large Load Diff

View File

@ -459,6 +459,10 @@ type DaemonSetStatus struct {
// pod (including nodes correctly running the daemon pod). // pod (including nodes correctly running the daemon pod).
// More info: http://releases.k8s.io/HEAD/docs/admin/daemons.md // More info: http://releases.k8s.io/HEAD/docs/admin/daemons.md
DesiredNumberScheduled int32 `json:"desiredNumberScheduled" protobuf:"varint,3,opt,name=desiredNumberScheduled"` DesiredNumberScheduled int32 `json:"desiredNumberScheduled" protobuf:"varint,3,opt,name=desiredNumberScheduled"`
// NumberReady is the number of nodes that should be running the daemon pod and have one
// or more of the daemon pod running and ready.
NumberReady int32 `json:"numberReady" protobuf:"varint,4,opt,name=numberReady"`
} }
// +genclient=true // +genclient=true

View File

@ -99,6 +99,7 @@ var map_DaemonSetStatus = map[string]string{
"currentNumberScheduled": "CurrentNumberScheduled is the number of nodes that are running at least 1 daemon pod and are supposed to run the daemon pod. More info: http://releases.k8s.io/HEAD/docs/admin/daemons.md", "currentNumberScheduled": "CurrentNumberScheduled is the number of nodes that are running at least 1 daemon pod and are supposed to run the daemon pod. More info: http://releases.k8s.io/HEAD/docs/admin/daemons.md",
"numberMisscheduled": "NumberMisscheduled is the number of nodes that are running the daemon pod, but are not supposed to run the daemon pod. More info: http://releases.k8s.io/HEAD/docs/admin/daemons.md", "numberMisscheduled": "NumberMisscheduled is the number of nodes that are running the daemon pod, but are not supposed to run the daemon pod. More info: http://releases.k8s.io/HEAD/docs/admin/daemons.md",
"desiredNumberScheduled": "DesiredNumberScheduled is the total number of nodes that should be running the daemon pod (including nodes correctly running the daemon pod). More info: http://releases.k8s.io/HEAD/docs/admin/daemons.md", "desiredNumberScheduled": "DesiredNumberScheduled is the total number of nodes that should be running the daemon pod (including nodes correctly running the daemon pod). More info: http://releases.k8s.io/HEAD/docs/admin/daemons.md",
"numberReady": "NumberReady is the number of nodes that should be running the daemon pod and have one or more of the daemon pod running and ready.",
} }
func (DaemonSetStatus) SwaggerDoc() map[string]string { func (DaemonSetStatus) SwaggerDoc() map[string]string {

View File

@ -455,6 +455,7 @@ func autoConvert_v1beta1_DaemonSetStatus_To_extensions_DaemonSetStatus(in *Daemo
out.CurrentNumberScheduled = in.CurrentNumberScheduled out.CurrentNumberScheduled = in.CurrentNumberScheduled
out.NumberMisscheduled = in.NumberMisscheduled out.NumberMisscheduled = in.NumberMisscheduled
out.DesiredNumberScheduled = in.DesiredNumberScheduled out.DesiredNumberScheduled = in.DesiredNumberScheduled
out.NumberReady = in.NumberReady
return nil return nil
} }
@ -466,6 +467,7 @@ func autoConvert_extensions_DaemonSetStatus_To_v1beta1_DaemonSetStatus(in *exten
out.CurrentNumberScheduled = in.CurrentNumberScheduled out.CurrentNumberScheduled = in.CurrentNumberScheduled
out.NumberMisscheduled = in.NumberMisscheduled out.NumberMisscheduled = in.NumberMisscheduled
out.DesiredNumberScheduled = in.DesiredNumberScheduled out.DesiredNumberScheduled = in.DesiredNumberScheduled
out.NumberReady = in.NumberReady
return nil return nil
} }

View File

@ -249,6 +249,7 @@ func DeepCopy_v1beta1_DaemonSetStatus(in interface{}, out interface{}, c *conver
out.CurrentNumberScheduled = in.CurrentNumberScheduled out.CurrentNumberScheduled = in.CurrentNumberScheduled
out.NumberMisscheduled = in.NumberMisscheduled out.NumberMisscheduled = in.NumberMisscheduled
out.DesiredNumberScheduled = in.DesiredNumberScheduled out.DesiredNumberScheduled = in.DesiredNumberScheduled
out.NumberReady = in.NumberReady
return nil return nil
} }
} }

View File

@ -44,6 +44,7 @@ func TestValidateDaemonSetStatusUpdate(t *testing.T) {
CurrentNumberScheduled: 1, CurrentNumberScheduled: 1,
NumberMisscheduled: 2, NumberMisscheduled: 2,
DesiredNumberScheduled: 3, DesiredNumberScheduled: 3,
NumberReady: 1,
}, },
}, },
update: extensions.DaemonSet{ update: extensions.DaemonSet{
@ -52,6 +53,7 @@ func TestValidateDaemonSetStatusUpdate(t *testing.T) {
CurrentNumberScheduled: 1, CurrentNumberScheduled: 1,
NumberMisscheduled: 1, NumberMisscheduled: 1,
DesiredNumberScheduled: 3, DesiredNumberScheduled: 3,
NumberReady: 1,
}, },
}, },
}, },
@ -76,6 +78,7 @@ func TestValidateDaemonSetStatusUpdate(t *testing.T) {
CurrentNumberScheduled: 1, CurrentNumberScheduled: 1,
NumberMisscheduled: 2, NumberMisscheduled: 2,
DesiredNumberScheduled: 3, DesiredNumberScheduled: 3,
NumberReady: 1,
}, },
}, },
update: extensions.DaemonSet{ update: extensions.DaemonSet{
@ -88,6 +91,7 @@ func TestValidateDaemonSetStatusUpdate(t *testing.T) {
CurrentNumberScheduled: -1, CurrentNumberScheduled: -1,
NumberMisscheduled: -1, NumberMisscheduled: -1,
DesiredNumberScheduled: -3, DesiredNumberScheduled: -3,
NumberReady: -1,
}, },
}, },
}, },

View File

@ -226,6 +226,7 @@ func DeepCopy_extensions_DaemonSetStatus(in interface{}, out interface{}, c *con
out.CurrentNumberScheduled = in.CurrentNumberScheduled out.CurrentNumberScheduled = in.CurrentNumberScheduled
out.NumberMisscheduled = in.NumberMisscheduled out.NumberMisscheduled = in.NumberMisscheduled
out.DesiredNumberScheduled = in.DesiredNumberScheduled out.DesiredNumberScheduled = in.DesiredNumberScheduled
out.NumberReady = in.NumberReady
return nil return nil
} }
} }

View File

@ -531,10 +531,11 @@ func (dsc *DaemonSetsController) manage(ds *extensions.DaemonSet) error {
return utilerrors.NewAggregate(errors) return utilerrors.NewAggregate(errors)
} }
func storeDaemonSetStatus(dsClient unversionedextensions.DaemonSetInterface, ds *extensions.DaemonSet, desiredNumberScheduled, currentNumberScheduled, numberMisscheduled int) error { func storeDaemonSetStatus(dsClient unversionedextensions.DaemonSetInterface, ds *extensions.DaemonSet, desiredNumberScheduled, currentNumberScheduled, numberMisscheduled, numberReady int) error {
if int(ds.Status.DesiredNumberScheduled) == desiredNumberScheduled && if int(ds.Status.DesiredNumberScheduled) == desiredNumberScheduled &&
int(ds.Status.CurrentNumberScheduled) == currentNumberScheduled && int(ds.Status.CurrentNumberScheduled) == currentNumberScheduled &&
int(ds.Status.NumberMisscheduled) == numberMisscheduled { int(ds.Status.NumberMisscheduled) == numberMisscheduled &&
int(ds.Status.NumberReady) == numberReady {
return nil return nil
} }
@ -543,6 +544,7 @@ func storeDaemonSetStatus(dsClient unversionedextensions.DaemonSetInterface, ds
ds.Status.DesiredNumberScheduled = int32(desiredNumberScheduled) ds.Status.DesiredNumberScheduled = int32(desiredNumberScheduled)
ds.Status.CurrentNumberScheduled = int32(currentNumberScheduled) ds.Status.CurrentNumberScheduled = int32(currentNumberScheduled)
ds.Status.NumberMisscheduled = int32(numberMisscheduled) ds.Status.NumberMisscheduled = int32(numberMisscheduled)
ds.Status.NumberReady = int32(numberReady)
if _, updateErr = dsClient.UpdateStatus(ds); updateErr == nil { if _, updateErr = dsClient.UpdateStatus(ds); updateErr == nil {
return nil return nil
@ -570,7 +572,7 @@ func (dsc *DaemonSetsController) updateDaemonSetStatus(ds *extensions.DaemonSet)
return fmt.Errorf("couldn't get list of nodes when updating daemon set %#v: %v", ds, err) return fmt.Errorf("couldn't get list of nodes when updating daemon set %#v: %v", ds, err)
} }
var desiredNumberScheduled, currentNumberScheduled, numberMisscheduled int var desiredNumberScheduled, currentNumberScheduled, numberMisscheduled, numberReady int
for _, node := range nodeList.Items { for _, node := range nodeList.Items {
shouldRun := dsc.nodeShouldRunDaemonPod(&node, ds) shouldRun := dsc.nodeShouldRunDaemonPod(&node, ds)
@ -580,6 +582,12 @@ func (dsc *DaemonSetsController) updateDaemonSetStatus(ds *extensions.DaemonSet)
desiredNumberScheduled++ desiredNumberScheduled++
if scheduled { if scheduled {
currentNumberScheduled++ currentNumberScheduled++
// Sort the daemon pods by creation time, so the the oldest is first.
daemonPods, _ := nodeToDaemonPods[node.Name]
sort.Sort(podByCreationTimestamp(daemonPods))
if api.IsPodReady(daemonPods[0]) {
numberReady++
}
} }
} else { } else {
if scheduled { if scheduled {
@ -588,7 +596,7 @@ func (dsc *DaemonSetsController) updateDaemonSetStatus(ds *extensions.DaemonSet)
} }
} }
err = storeDaemonSetStatus(dsc.kubeClient.Extensions().DaemonSets(ds.Namespace), ds, desiredNumberScheduled, currentNumberScheduled, numberMisscheduled) err = storeDaemonSetStatus(dsc.kubeClient.Extensions().DaemonSets(ds.Namespace), ds, desiredNumberScheduled, currentNumberScheduled, numberMisscheduled, numberReady)
if err != nil { if err != nil {
return fmt.Errorf("error storing status for daemon set %#v: %v", ds, err) return fmt.Errorf("error storing status for daemon set %#v: %v", ds, err)
} }

View File

@ -569,3 +569,29 @@ func TestNodeAffinityDaemonLaunchesPods(t *testing.T) {
manager.dsStore.Add(daemon) manager.dsStore.Add(daemon)
syncAndValidateDaemonSets(t, manager, daemon, podControl, 3, 0) syncAndValidateDaemonSets(t, manager, daemon, podControl, 3, 0)
} }
func TestNumberReadyStatus(t *testing.T) {
manager, podControl := newTestController()
addNodes(manager.nodeStore.Store, 0, 2, simpleNodeLabel)
addPods(manager.podStore.Indexer, "node-0", simpleDaemonSetLabel, 1)
addPods(manager.podStore.Indexer, "node-1", simpleDaemonSetLabel, 1)
daemon := newDaemonSet("foo")
manager.dsStore.Add(daemon)
syncAndValidateDaemonSets(t, manager, daemon, podControl, 0, 0)
if daemon.Status.NumberReady != 0 {
t.Errorf("Wrong daemon %s status: %v", daemon.Name, daemon.Status)
}
selector, _ := unversioned.LabelSelectorAsSelector(daemon.Spec.Selector)
daemonPods, _ := manager.podStore.Pods(daemon.Namespace).List(selector)
for _, pod := range daemonPods {
condition := api.PodCondition{Type: api.PodReady, Status: api.ConditionTrue}
pod.Status.Conditions = append(pod.Status.Conditions, condition)
}
syncAndValidateDaemonSets(t, manager, daemon, podControl, 0, 0)
if daemon.Status.NumberReady != 2 {
t.Errorf("Wrong daemon %s status: %v", daemon.Name, daemon.Status)
}
}

View File

@ -3268,8 +3268,15 @@ var OpenAPIDefinitions *common.OpenAPIDefinitions = &common.OpenAPIDefinitions{
Format: "int32", Format: "int32",
}, },
}, },
"numberReady": {
SchemaProps: spec.SchemaProps{
Description: "NumberReady is the number of nodes that should be running the daemon pod and have one or more of the daemon pod running and ready.",
Type: []string{"integer"},
Format: "int32",
},
},
}, },
Required: []string{"currentNumberScheduled", "numberMisscheduled", "desiredNumberScheduled"}, Required: []string{"currentNumberScheduled", "numberMisscheduled", "desiredNumberScheduled", "numberReady"},
}, },
}, },
Dependencies: []string{}, Dependencies: []string{},
@ -15499,8 +15506,15 @@ var OpenAPIDefinitions *common.OpenAPIDefinitions = &common.OpenAPIDefinitions{
Format: "int32", Format: "int32",
}, },
}, },
"numberReady": {
SchemaProps: spec.SchemaProps{
Description: "NumberReady is the number of nodes that should be running the daemon pod and have one or more of the daemon pod running and ready.",
Type: []string{"integer"},
Format: "int32",
},
},
}, },
Required: []string{"currentNumberScheduled", "numberMisscheduled", "desiredNumberScheduled"}, Required: []string{"currentNumberScheduled", "numberMisscheduled", "desiredNumberScheduled", "numberReady"},
}, },
}, },
Dependencies: []string{}, Dependencies: []string{},

View File

@ -472,7 +472,7 @@ var (
petSetColumns = []string{"NAME", "DESIRED", "CURRENT", "AGE"} petSetColumns = []string{"NAME", "DESIRED", "CURRENT", "AGE"}
endpointColumns = []string{"NAME", "ENDPOINTS", "AGE"} endpointColumns = []string{"NAME", "ENDPOINTS", "AGE"}
nodeColumns = []string{"NAME", "STATUS", "AGE"} nodeColumns = []string{"NAME", "STATUS", "AGE"}
daemonSetColumns = []string{"NAME", "DESIRED", "CURRENT", "NODE-SELECTOR", "AGE"} daemonSetColumns = []string{"NAME", "DESIRED", "CURRENT", "READY", "NODE-SELECTOR", "AGE"}
eventColumns = []string{"LASTSEEN", "FIRSTSEEN", "COUNT", "NAME", "KIND", "SUBOBJECT", "TYPE", "REASON", "SOURCE", "MESSAGE"} eventColumns = []string{"LASTSEEN", "FIRSTSEEN", "COUNT", "NAME", "KIND", "SUBOBJECT", "TYPE", "REASON", "SOURCE", "MESSAGE"}
limitRangeColumns = []string{"NAME", "AGE"} limitRangeColumns = []string{"NAME", "AGE"}
resourceQuotaColumns = []string{"NAME", "AGE"} resourceQuotaColumns = []string{"NAME", "AGE"}
@ -1286,15 +1286,17 @@ func printDaemonSet(ds *extensions.DaemonSet, w io.Writer, options PrintOptions)
desiredScheduled := ds.Status.DesiredNumberScheduled desiredScheduled := ds.Status.DesiredNumberScheduled
currentScheduled := ds.Status.CurrentNumberScheduled currentScheduled := ds.Status.CurrentNumberScheduled
numberReady := ds.Status.NumberReady
selector, err := unversioned.LabelSelectorAsSelector(ds.Spec.Selector) selector, err := unversioned.LabelSelectorAsSelector(ds.Spec.Selector)
if err != nil { if err != nil {
// this shouldn't happen if LabelSelector passed validation // this shouldn't happen if LabelSelector passed validation
return err return err
} }
if _, err := fmt.Fprintf(w, "%s\t%d\t%d\t%s\t%s", if _, err := fmt.Fprintf(w, "%s\t%d\t%d\t%d\t%s\t%s",
name, name,
desiredScheduled, desiredScheduled,
currentScheduled, currentScheduled,
numberReady,
labels.FormatLabels(ds.Spec.Template.Spec.NodeSelector), labels.FormatLabels(ds.Spec.Template.Spec.NodeSelector),
translateTimestamp(ds.CreationTimestamp), translateTimestamp(ds.CreationTimestamp),
); err != nil { ); err != nil {

View File

@ -1446,9 +1446,10 @@ func TestPrintDaemonSet(t *testing.T) {
Status: extensions.DaemonSetStatus{ Status: extensions.DaemonSetStatus{
CurrentNumberScheduled: 2, CurrentNumberScheduled: 2,
DesiredNumberScheduled: 3, DesiredNumberScheduled: 3,
NumberReady: 1,
}, },
}, },
"test1\t3\t2\t<none>\t0s\n", "test1\t3\t2\t1\t<none>\t0s\n",
}, },
} }

View File

@ -127,6 +127,8 @@ var _ = framework.KubeDescribe("Daemon set [Serial]", func() {
Expect(err).NotTo(HaveOccurred()) Expect(err).NotTo(HaveOccurred())
err = wait.Poll(dsRetryPeriod, dsRetryTimeout, checkRunningOnAllNodes(f, label)) err = wait.Poll(dsRetryPeriod, dsRetryTimeout, checkRunningOnAllNodes(f, label))
Expect(err).NotTo(HaveOccurred(), "error waiting for daemon pod to start") Expect(err).NotTo(HaveOccurred(), "error waiting for daemon pod to start")
err = checkDaemonStatus(f, dsName)
Expect(err).NotTo(HaveOccurred())
By("Stop a daemon pod, check that the daemon pod is revived.") By("Stop a daemon pod, check that the daemon pod is revived.")
podClient := c.Pods(ns) podClient := c.Pods(ns)
@ -186,6 +188,8 @@ var _ = framework.KubeDescribe("Daemon set [Serial]", func() {
Expect(len(daemonSetLabels)).To(Equal(1)) Expect(len(daemonSetLabels)).To(Equal(1))
err = wait.Poll(dsRetryPeriod, dsRetryTimeout, checkDaemonPodOnNodes(f, complexLabel, []string{newNode.Name})) err = wait.Poll(dsRetryPeriod, dsRetryTimeout, checkDaemonPodOnNodes(f, complexLabel, []string{newNode.Name}))
Expect(err).NotTo(HaveOccurred(), "error waiting for daemon pods to be running on new nodes") Expect(err).NotTo(HaveOccurred(), "error waiting for daemon pods to be running on new nodes")
err = checkDaemonStatus(f, dsName)
Expect(err).NotTo(HaveOccurred())
By("remove the node selector and wait for daemons to be unscheduled") By("remove the node selector and wait for daemons to be unscheduled")
_, err = setDaemonSetNodeLabels(c, nodeList.Items[0].Name, map[string]string{}) _, err = setDaemonSetNodeLabels(c, nodeList.Items[0].Name, map[string]string{})
@ -252,6 +256,8 @@ var _ = framework.KubeDescribe("Daemon set [Serial]", func() {
Expect(len(daemonSetLabels)).To(Equal(1)) Expect(len(daemonSetLabels)).To(Equal(1))
err = wait.Poll(dsRetryPeriod, dsRetryTimeout, checkDaemonPodOnNodes(f, complexLabel, []string{newNode.Name})) err = wait.Poll(dsRetryPeriod, dsRetryTimeout, checkDaemonPodOnNodes(f, complexLabel, []string{newNode.Name}))
Expect(err).NotTo(HaveOccurred(), "error waiting for daemon pods to be running on new nodes") Expect(err).NotTo(HaveOccurred(), "error waiting for daemon pods to be running on new nodes")
err = checkDaemonStatus(f, dsName)
Expect(err).NotTo(HaveOccurred())
By("remove the node selector and wait for daemons to be unscheduled") By("remove the node selector and wait for daemons to be unscheduled")
_, err = setDaemonSetNodeLabels(c, nodeList.Items[0].Name, map[string]string{}) _, err = setDaemonSetNodeLabels(c, nodeList.Items[0].Name, map[string]string{})
@ -374,3 +380,15 @@ func checkRunningOnAllNodes(f *framework.Framework, selector map[string]string)
func checkRunningOnNoNodes(f *framework.Framework, selector map[string]string) func() (bool, error) { func checkRunningOnNoNodes(f *framework.Framework, selector map[string]string) func() (bool, error) {
return checkDaemonPodOnNodes(f, selector, make([]string, 0)) return checkDaemonPodOnNodes(f, selector, make([]string, 0))
} }
func checkDaemonStatus(f *framework.Framework, dsName string) error {
ds, err := f.Client.DaemonSets(f.Namespace.Name).Get(dsName)
if err != nil {
return fmt.Errorf("Could not get daemon set from api.")
}
desired, scheduled, ready := ds.Status.DesiredNumberScheduled, ds.Status.CurrentNumberScheduled, ds.Status.NumberReady
if desired != scheduled && desired != ready {
return fmt.Errorf("Error in daemon status. DesiredScheduled: %d, CurrentScheduled: %d, Ready: %d", desired, scheduled, ready)
}
return nil
}