/* Ċ Ġ* ĠCopyright Ġ( C ) Ġ 2 0 1 5 ĠSquare , ĠInc . Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ*/ Ċ package Ġcom . squareup . wire . schema Ċ Ċ import Ġorg . assertj . core . api . Assertions . assertThat Ċ import Ġorg . junit . Test Ċ import Ġkotlin . test . fail Ċ Ċ class ĠP run ing Rules Test Ġ{ ĊĠ Ġ@ Test ĊĠ Ġfun Ġen closing () Ġ{ ĊĠĠĠ ĠassertThat ( P run ing Rules . enc lo sing (" a . b . Outer # member ")). isEqualTo (" a . b . Outer ") ĊĠĠĠ ĠassertThat ( P run ing Rules . enc lo sing (" a . b . Outer ")). isEqualTo (" a . b .* ") ĊĠĠĠ ĠassertThat ( P run ing Rules . enc lo sing (" a . b .* ")). isEqualTo (" a .* ") ĊĠĠĠ ĠassertThat ( P run ing Rules . enc lo sing (" a .* ")). isEqualTo ("* ") ĊĠĠĠ ĠassertThat ( P run ing Rules . enc lo sing ("* ")). isNull () ĊĠ Ġ} ĊĊĠ Ġ@ Test ĊĠ Ġfun Ġen closing On Nested Class () Ġ{ ĊĠĠĠ ĠassertThat ( P run ing Rules . enc lo sing (" a . b . Outer . Inner # member ")). isEqualTo (" a . b . Outer . Inner ") ĊĠĠĠ ĠassertThat ( P run ing Rules . enc lo sing (" a . b . Outer . Inner ")). isEqualTo (" a . b . Outer .* ") ĊĠĠĠ ĠassertThat ( P run ing Rules . enc lo sing (" a . b . Outer .* ")). isEqualTo (" a . b .* ") ĊĠ Ġ} ĊĊĠ Ġ@ Test ĊĠ Ġfun Ġempty () Ġ{ ĊĠĠĠ Ġval Ġset Ġ= ĠP run ing Rules . Builder (). build () ĊĠĠĠ ĠassertThat ( policy ( set , Ġ" a . b . Message ")). isEqualTo ( Policy . INCLUDED ) ĊĠĠĠ ĠassertThat ( policy ( set , Ġ" a . b . Message # member ")). isEqualTo ( Policy . INCLUDED ) ĊĠ Ġ} ĊĊĠ Ġ/** ĠNote Ġthat Ġincluding Ġa Ġtype Ġincludes Ġnested Ġmembers , Ġbut Ġnot Ġnested Ġtypes . Ġ Ġ*/ ĊĠ Ġ@ Test ĊĠ Ġfun Ġinclude Type () Ġ{ ĊĠĠĠ Ġval Ġset Ġ= ĠP run ing Rules . Builder () ĊĠĠĠĠĠĠĠ Ġ. add Root (" a . b . Message ") ĊĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠ ĠassertThat ( policy ( set , Ġ" a . b . Message ")). isEqualTo ( Policy . INCLUDED ) ĊĠĠĠ ĠassertThat ( policy ( set , Ġ" a . b . Message # member ")). isEqualTo ( Policy . INCLUDED ) ĊĠĠĠ ĠassertThat ( policy ( set , Ġ" a . b . Message . Nested ")). isEqualTo ( Policy . UNSPECIFIED ) ĊĠĠĠ ĠassertThat ( policy ( set , Ġ" a . b . Another ")). isEqualTo ( Policy . UNSPECIFIED ) ĊĠĠĠ ĠassertThat ( policy ( set , Ġ" a . b . Another # member ")). isEqualTo ( Policy . UNSPECIFIED ) ĊĠ Ġ} ĊĊĠ Ġ@ Test ĊĠ Ġfun Ġinclude Member () Ġ{ ĊĠĠĠ Ġval Ġset Ġ= ĠP run ing Rules . Builder () ĊĠĠĠĠĠĠĠ Ġ. add Root (" a . b . Message # member ") ĊĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠ ĠassertThat ( policy ( set , Ġ" a . b . Message ")). isEqualTo ( Policy . UNSPECIFIED ) ĊĠĠĠ ĠassertThat ( policy ( set , Ġ" a . b . Message . Nested ")). isEqualTo ( Policy . UNSPECIFIED ) ĊĠĠĠ ĠassertThat ( policy ( set , Ġ" a . b . Message # member ")). isEqualTo ( Policy . INCLUDED ) ĊĠĠĠ ĠassertThat ( policy ( set , Ġ" a . b . Message # other ")). isEqualTo ( Policy . UNSPECIFIED ) ĊĠĠĠ ĠassertThat ( policy ( set , Ġ" a . b . Another ")). isEqualTo ( Policy . UNSPECIFIED ) ĊĠĠĠ ĠassertThat ( policy ( set , Ġ" a . b . Another # member ")). isEqualTo ( Policy . UNSPECIFIED ) ĊĠ Ġ} ĊĊĠ Ġ@ Test ĊĠ Ġfun Ġinclude Package () Ġ{ ĊĠĠĠ Ġval Ġset Ġ= ĠP run ing Rules . Builder () ĊĠĠĠĠĠĠĠ Ġ. add Root (" a . b .* ") ĊĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠ ĠassertThat ( policy ( set , Ġ" a . b . Message ")). isEqualTo ( Policy . INCLUDED ) ĊĠĠĠ ĠassertThat ( policy ( set , Ġ" a . b . Message # member ")). isEqualTo ( Policy . INCLUDED ) ĊĠĠĠ ĠassertThat ( policy ( set , Ġ" a . b . c . Message ")). isEqualTo ( Policy . INCLUDED ) ĊĠĠĠ ĠassertThat ( policy ( set , Ġ" a . b . c . Message # member ")). isEqualTo ( Policy . INCLUDED ) ĊĠĠĠ ĠassertThat ( policy ( set , Ġ" a . c . Another ")). isEqualTo ( Policy . UNSPECIFIED ) ĊĠĠĠ ĠassertThat ( policy ( set , Ġ" a . c . Another # member ")). isEqualTo ( Policy . UNSPECIFIED ) ĊĠ Ġ} ĊĊĠ Ġ@ Test ĊĠ Ġfun Ġinclude All () Ġ{ ĊĠĠĠ Ġval Ġset Ġ= ĠP run ing Rules . Builder () ĊĠĠĠĠĠĠĠ Ġ. add Root ("* ") ĊĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠ ĠassertThat ( policy ( set , Ġ" a . b . Message ")). isEqualTo ( Policy . INCLUDED ) ĊĠĠĠ ĠassertThat ( policy ( set , Ġ" a . b . Message # member ")). isEqualTo ( Policy . INCLUDED ) ĊĠ Ġ} ĊĊĠ Ġ@ Test ĊĠ Ġfun Ġexclude Type () Ġ{ ĊĠĠĠ Ġval Ġset Ġ= ĠP run ing Rules . Builder () ĊĠĠĠĠĠĠĠ Ġ. prune (" a . b . Message ") ĊĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠ ĠassertThat ( policy ( set , Ġ" a . b . Message ")). isEqualTo ( Policy . EXCL UDE D ) ĊĠĠĠ ĠassertThat ( policy ( set , Ġ" a . b . Message # member ")). isEqualTo ( Policy . EXCL UDE D ) ĊĠĠĠ ĠassertThat ( policy ( set , Ġ" a . b . Another ")). isEqualTo ( Policy . INCLUDED ) ĊĠĠĠ ĠassertThat ( policy ( set , Ġ" a . b . Another # member ")). isEqualTo ( Policy . INCLUDED ) ĊĠ Ġ} ĊĊĠ Ġ@ Test ĊĠ Ġfun Ġexclude Member () Ġ{ ĊĠĠĠ Ġval Ġset Ġ= ĠP run ing Rules . Builder () ĊĠĠĠĠĠĠĠ Ġ. prune (" a . b . Message # member ") ĊĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠ ĠassertThat ( policy ( set , Ġ" a . b . Message ")). isEqualTo ( Policy . INCLUDED ) ĊĠĠĠ ĠassertThat ( policy ( set , Ġ" a . b . Message # member ")). isEqualTo ( Policy . EXCL UDE D ) ĊĠĠĠ ĠassertThat ( policy ( set , Ġ" a . b . Message # other ")). isEqualTo ( Policy . INCLUDED ) ĊĠĠĠ ĠassertThat ( policy ( set , Ġ" a . b . Another ")). isEqualTo ( Policy . INCLUDED ) ĊĠĠĠ ĠassertThat ( policy ( set , Ġ" a . b . Another # member ")). isEqualTo ( Policy . INCLUDED ) ĊĠ Ġ} ĊĊĠ Ġ@ Test ĊĠ Ġfun Ġexclude Package () Ġ{ ĊĠĠĠ Ġval Ġset Ġ= ĠP run ing Rules . Builder () ĊĠĠĠĠĠĠĠ Ġ. prune (" a . b .* ") ĊĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠ ĠassertThat ( policy ( set , Ġ" a . b . Message ")). isEqualTo ( Policy . EXCL UDE D ) ĊĠĠĠ ĠassertThat ( policy ( set , Ġ" a . b . Message # member ")). isEqualTo ( Policy . EXCL UDE D ) ĊĠĠĠ ĠassertThat ( policy ( set , Ġ" a . b . c . Message ")). isEqualTo ( Policy . EXCL UDE D ) ĊĠĠĠ ĠassertThat ( policy ( set , Ġ" a . b . c . Message # member ")). isEqualTo ( Policy . EXCL UDE D ) ĊĠĠĠ ĠassertThat ( policy ( set , Ġ" a . c . Another ")). isEqualTo ( Policy . INCLUDED ) ĊĠĠĠ ĠassertThat ( policy ( set , Ġ" a . c . Another # member ")). isEqualTo ( Policy . INCLUDED ) ĊĠ Ġ} ĊĊĠ Ġ@ Test ĊĠ Ġfun Ġexclude Package DoesNot Take Pre cedence Over Include Type () Ġ{ ĊĠĠĠ Ġval Ġset Ġ= ĠP run ing Rules . Builder () ĊĠĠĠĠĠĠĠ Ġ. prune (" a . b .* ") ĊĠĠĠĠĠĠĠ Ġ. add Root (" a . b . Message ") ĊĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠ ĠassertThat ( policy ( set , Ġ" a . b . Message ")). isEqualTo ( Policy . INCLUDED ) ĊĠĠĠ ĠassertThat ( policy ( set , Ġ" a . b . Message # member ")). isEqualTo ( Policy . INCLUDED ) ĊĠĠĠ ĠassertThat ( policy ( set , Ġ" a . b . Another ")). isEqualTo ( Policy . EXCL UDE D ) ĊĠĠĠ ĠassertThat ( policy ( set , Ġ" a . b . Another # member ")). isEqualTo ( Policy . EXCL UDE D ) ĊĠĠĠ ĠassertThat ( policy ( set , Ġ" a . c . Y et Another ")). isEqualTo ( Policy . UNSPECIFIED ) ĊĠĠĠ ĠassertThat ( policy ( set , Ġ" a . c . Y et Another # member ")). isEqualTo ( Policy . UNSPECIFIED ) ĊĠ Ġ} ĊĊĠ Ġ@ Test ĊĠ Ġfun Ġexclude Type DoesNot Take Pre cedence Over Include Member () Ġ{ ĊĠĠĠ Ġval Ġset Ġ= ĠP run ing Rules . Builder () ĊĠĠĠĠĠĠĠ Ġ. prune (" a . b . Message ") ĊĠĠĠĠĠĠĠ Ġ. add Root (" a . b . Message # member ") ĊĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠ ĠassertThat ( policy ( set , Ġ" a . b . Message ")). isEqualTo ( Policy . EXCL UDE D ) ĊĠĠĠ ĠassertThat ( policy ( set , Ġ" a . b . Message # member ")). isEqualTo ( Policy . INCLUDED ) ĊĠĠĠ ĠassertThat ( policy ( set , Ġ" a . b . Message # other ")). isEqualTo ( Policy . EXCL UDE D ) ĊĠĠĠ ĠassertThat ( policy ( set , Ġ" a . b . Another ")). isEqualTo ( Policy . UNSPECIFIED ) ĊĠĠĠ ĠassertThat ( policy ( set , Ġ" a . b . Another # member ")). isEqualTo ( Policy . UNSPECIFIED ) ĊĠ Ġ} ĊĊĠ Ġ@ Test ĊĠ Ġfun Ġexclude Member T akes Pre cedence Over Include Type () Ġ{ ĊĠĠĠ Ġval Ġset Ġ= ĠP run ing Rules . Builder () ĊĠĠĠĠĠĠĠ Ġ. prune (" a . b . Message # member ") ĊĠĠĠĠĠĠĠ Ġ. add Root (" a . b . Message ") ĊĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠ ĠassertThat ( policy ( set , Ġ" a . b . Message ")). isEqualTo ( Policy . INCLUDED ) ĊĠĠĠ ĠassertThat ( policy ( set , Ġ" a . b . Message # member ")). isEqualTo ( Policy . EXCL UDE D ) ĊĠĠĠ ĠassertThat ( policy ( set , Ġ" a . b . Message # other ")). isEqualTo ( Policy . INCLUDED ) ĊĠĠĠ ĠassertThat ( policy ( set , Ġ" a . b . Another ")). isEqualTo ( Policy . UNSPECIFIED ) ĊĠĠĠ ĠassertThat ( policy ( set , Ġ" a . b . Another # member ")). isEqualTo ( Policy . UNSPECIFIED ) ĊĠ Ġ} ĊĊĠ Ġ@ Test ĊĠ Ġfun Ġmost Prec ise Rule T akes Pre cedence () Ġ{ ĊĠĠĠ Ġval Ġset Ġ= ĠP run ing Rules . Builder () ĊĠĠĠĠĠĠĠ Ġ. prune (" a . b . Message # member ") ĊĠĠĠĠĠĠĠ Ġ. add Root (" a . b . Message ") ĊĠĠĠĠĠĠĠ Ġ. prune (" a . b .* ") ĊĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠ ĠassertThat ( policy ( set , Ġ" a . b . Message ")). isEqualTo ( Policy . INCLUDED ) ĊĠĠĠ ĠassertThat ( policy ( set , Ġ" a . b . Message # member ")). isEqualTo ( Policy . EXCL UDE D ) ĊĠĠĠ ĠassertThat ( policy ( set , Ġ" a . b . Message # other ")). isEqualTo ( Policy . INCLUDED ) ĊĠĠĠ ĠassertThat ( policy ( set , Ġ" a . b . Another ")). isEqualTo ( Policy . EXCL UDE D ) ĊĠĠĠ ĠassertThat ( policy ( set , Ġ" a . b . Another # member ")). isEqualTo ( Policy . EXCL UDE D ) ĊĠ Ġ} ĊĊĠ Ġ@ Test ĊĠ Ġfun Ġtracking Unused Includes () Ġ{ ĊĠĠĠ Ġval Ġset Ġ= ĠP run ing Rules . Builder () ĊĠĠĠĠĠĠĠ Ġ. add Root (" a .* ") ĊĠĠĠĠĠĠĠ Ġ. add Root (" b . Included Type ") ĊĠĠĠĠĠĠĠ Ġ. add Root (" c . Included Member # member ") ĊĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠ ĠassertThat ( set . unused Roots ()). contains Exactly (" a .* ", Ġ" b . Included Type ", ĊĠĠĠĠĠĠĠ Ġ" c . Included Member # member ") ĊĊĠĠĠ Ġset . is Root ( Proto Type . get (" a .* ")) ĊĠĠĠ ĠassertThat ( set . unused Roots ()). contains Exactly (" b . Included Type ", Ġ" c . Included Member # member ") ĊĊĠĠĠ Ġset . is Root ( Proto Type . get (" b . Included Type ")) ĊĠĠĠ ĠassertThat ( set . unused Roots ()). contains Exactly (" c . Included Member # member ") ĊĊĠĠĠ Ġset . is Root ( Proto Member . get (" c . Included Member # member ")) ĊĠĠĠ ĠassertThat ( set . unused Roots ()). isEmpty () ĊĠ Ġ} ĊĊĠ Ġ@ Test ĊĠ Ġfun Ġtracking Unused Exclude s () Ġ{ ĊĠĠĠ Ġval Ġset Ġ= ĠP run ing Rules . Builder () ĊĠĠĠĠĠĠĠ Ġ. prune (" a .* ") ĊĠĠĠĠĠĠĠ Ġ. prune (" b . Excluded Type ") ĊĠĠĠĠĠĠĠ Ġ. prune (" c . Excluded Member # member ") ĊĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠ ĠassertThat ( set . unused P run es ()). contains Exactly (" a .* ", Ġ" b . Excluded Type ", ĊĠĠĠĠĠĠĠ Ġ" c . Excluded Member # member ") ĊĊĠĠĠ Ġset . is Root ( Proto Type . get (" a .* ")) ĊĠĠĠ ĠassertThat ( set . unused P run es ()). contains Exactly (" b . Excluded Type ", Ġ" c . Excluded Member # member ") ĊĊĠĠĠ Ġset . is Root ( Proto Type . get (" b . Excluded Type ")) ĊĠĠĠ ĠassertThat ( set . unused P run es ()). contains Exactly (" c . Excluded Member # member ") ĊĊĠĠĠ Ġset . is Root ( Proto Member . get (" c . Excluded Member # member ")) ĊĠĠĠ ĠassertThat ( set . unused P run es ()). isEmpty () ĊĠ Ġ} ĊĊĠ Ġ@ Test ĊĠ Ġfun Ġtracking Unused Includes Pre cedence () Ġ{ ĊĠĠĠ Ġval Ġset Ġ= ĠP run ing Rules . Builder () ĊĠĠĠĠĠĠĠ Ġ. add Root (" a .* ") ĊĠĠĠĠĠĠĠ Ġ. add Root (" a . Included Type ") ĊĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠ Ġset . is Root ( Proto Member . get (" a . Included Type # member ")) ĊĠĠĠ ĠassertThat ( set . unused Roots ()). contains Exactly (" a .* ") ĊĠ Ġ} ĊĊĠ Ġ@ Test ĊĠ Ġfun Ġtracking Unused Exclude s Pre cedence () Ġ{ ĊĠĠĠ Ġval Ġset Ġ= ĠP run ing Rules . Builder () ĊĠĠĠĠĠĠĠ Ġ. prune (" a .* ") ĊĠĠĠĠĠĠĠ Ġ. prune (" a . Included Type ") ĊĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠ Ġset . is Root ( Proto Member . get (" a . Included Type # member ")) ĊĠĠĠ ĠassertThat ( set . unused P run es ()). contains Exactly (" a .* ") ĊĠ Ġ} ĊĊĠ Ġ@ Test ĊĠ Ġfun Ġcrash For Conflict ing Rules () Ġ{ ĊĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠ ĠP run ing Rules . Builder () ĊĠĠĠĠĠĠĠĠĠ Ġ. add Root (" a .* ") ĊĠĠĠĠĠĠĠĠĠ Ġ. prune (" a .* ") ĊĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠ Ġfail () ĊĠĠĠ Ġ} Ġcatch Ġ( exception : ĠIllegalStateException ) Ġ{ ĊĠĠĠĠĠ ĠassertThat ( exception ). has Message (" same Ġrule ( s ) Ġdefined Ġin Ġboth Ġroots Ġand Ġpr unes : Ġa .* ") ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġ@ Test ĊĠ Ġfun Ġonly Cannot Be Set Al ong Side Since () Ġ{ ĊĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠ ĠP run ing Rules . Builder () ĊĠĠĠĠĠĠĠĠĠ Ġ. only (" 3 ") ĊĠĠĠĠĠĠĠĠĠ Ġ. since (" 3 ") ĊĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠ Ġfail () ĊĠĠĠ Ġ} Ġcatch Ġ( exception : ĠIllegalStateException ) Ġ{ ĊĠĠĠĠĠ ĠassertThat ( exception ). has Message (" only Ġcannot Ġbe Ġset Ġalong Ġside Ġsince Ġand Ġuntil ") ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġ@ Test ĊĠ Ġfun Ġonly Cannot Be Set Al ong Side Until () Ġ{ ĊĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠ ĠP run ing Rules . Builder () ĊĠĠĠĠĠĠĠĠĠ Ġ. only (" 3 ") ĊĠĠĠĠĠĠĠĠĠ Ġ. until (" 3 . 1 ") ĊĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠ Ġfail () ĊĠĠĠ Ġ} Ġcatch Ġ( exception : ĠIllegalStateException ) Ġ{ ĊĠĠĠĠĠ ĠassertThat ( exception ). has Message (" only Ġcannot Ġbe Ġset Ġalong Ġside Ġsince Ġand Ġuntil ") ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġpolicy ( set : ĠP run ing Rules , Ġidentifier : ĠString ): ĠPolicy Ġ{ ĊĠĠĠ Ġreturn Ġif Ġ( identifier . contains ("# ")) Ġ{ ĊĠĠĠĠĠ Ġval Ġproto Member Ġ= ĠProto Member . get ( identifier ) ĊĠĠĠĠĠ Ġif Ġ( set . is Root ( proto Member )) Ġreturn ĠPolicy . INCLUDED ĊĠĠĠĠĠ Ġif Ġ( set . pr unes ( proto Member )) ĠPolicy . EXCL UDE D Ġelse ĠPolicy . UNSPECIFIED ĊĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠ Ġval Ġproto Type Ġ= ĠProto Type . get ( identifier ) ĊĠĠĠĠĠ Ġif Ġ( set . is Root ( proto Type )) Ġreturn ĠPolicy . INCLUDED ĊĠĠĠĠĠ Ġif Ġ( set . pr unes ( proto Type )) ĠPolicy . EXCL UDE D Ġelse ĠPolicy . UNSPECIFIED ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġinternal Ġenum Ġclass ĠPolicy Ġ{ ĊĠĠĠ ĠINCLUDE D , ĊĠĠĠ ĠUNS PE CI FIED , ĊĠĠĠ ĠEX CL UDE D ĊĠ Ġ} Ċ } Ċ