Function( Function { head: Destructured( FunctionHeadDestructured { ellipsis: true, identifier: None, arguments: [ FunctionHeadDestructuredArgument { identifier: "config", default: None, }, FunctionHeadDestructuredArgument { identifier: "lib", default: None, }, FunctionHeadDestructuredArgument { identifier: "pkgs", default: None, }, ], }, ), body: With( With { expression: Identifier( Identifier { id: "lib", span: Span { start: Position { line: 6, column: 6, }, end: Position { line: 6, column: 9, }, }, }, ), target: LetIn( LetIn { bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "parentConfig", span: Span { start: Position { line: 9, column: 3, }, end: Position { line: 9, column: 15, }, }, }, ), ], to: Identifier( Identifier { id: "config", span: Span { start: Position { line: 9, column: 18, }, end: Position { line: 9, column: 24, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "pamOpts", span: Span { start: Position { line: 11, column: 3, }, end: Position { line: 11, column: 10, }, }, }, ), ], to: Function( Function { head: Destructured( FunctionHeadDestructured { ellipsis: true, identifier: None, arguments: [ FunctionHeadDestructuredArgument { identifier: "config", default: None, }, FunctionHeadDestructuredArgument { identifier: "name", default: None, }, ], }, ), body: LetIn( LetIn { bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "cfg", span: Span { start: Position { line: 11, column: 40, }, end: Position { line: 11, column: 43, }, }, }, ), ], to: Identifier( Identifier { id: "config", span: Span { start: Position { line: 11, column: 46, }, end: Position { line: 11, column: 52, }, }, }, ), }, ), ], target: LetIn( LetIn { bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "config", span: Span { start: Position { line: 11, column: 61, }, end: Position { line: 11, column: 67, }, }, }, ), ], to: Identifier( Identifier { id: "parentConfig", span: Span { start: Position { line: 11, column: 70, }, end: Position { line: 11, column: 82, }, }, }, ), }, ), ], target: Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "options", span: Span { start: Position { line: 13, column: 5, }, end: Position { line: 13, column: 12, }, }, }, ), ], to: Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "name", span: Span { start: Position { line: 15, column: 7, }, end: Position { line: 15, column: 11, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "mkOption", span: Span { start: Position { line: 15, column: 14, }, end: Position { line: 15, column: 22, }, }, }, ), arguments: [ Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "example", span: Span { start: Position { line: 16, column: 9, }, end: Position { line: 16, column: 16, }, }, }, ), ], to: String( String_ { parts: [ Raw( PartRaw { content: "sshd", span: Span { start: Position { line: 16, column: 20, }, end: Position { line: 16, column: 24, }, }, }, ), ], span: Span { start: Position { line: 16, column: 19, }, end: Position { line: 16, column: 25, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "type", span: Span { start: Position { line: 17, column: 9, }, end: Position { line: 17, column: 13, }, }, }, ), ], to: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "types", span: Span { start: Position { line: 17, column: 16, }, end: Position { line: 17, column: 21, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "str", span: Span { start: Position { line: 17, column: 22, }, end: Position { line: 17, column: 25, }, }, }, ), ], default: None, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "description", span: Span { start: Position { line: 18, column: 9, }, end: Position { line: 18, column: 20, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "lib", span: Span { start: Position { line: 18, column: 23, }, end: Position { line: 18, column: 26, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "mdDoc", span: Span { start: Position { line: 18, column: 27, }, end: Position { line: 18, column: 32, }, }, }, ), ], default: None, }, ), arguments: [ String( String_ { parts: [ Raw( PartRaw { content: "Name of the PAM service.", span: Span { start: Position { line: 18, column: 34, }, end: Position { line: 18, column: 58, }, }, }, ), ], span: Span { start: Position { line: 18, column: 33, }, end: Position { line: 18, column: 59, }, }, }, ), ], }, ), }, ), ], span: Span { start: Position { line: 15, column: 23, }, end: Position { line: 19, column: 8, }, }, }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "unixAuth", span: Span { start: Position { line: 21, column: 7, }, end: Position { line: 21, column: 15, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "mkOption", span: Span { start: Position { line: 21, column: 18, }, end: Position { line: 21, column: 26, }, }, }, ), arguments: [ Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "default", span: Span { start: Position { line: 22, column: 9, }, end: Position { line: 22, column: 16, }, }, }, ), ], to: Identifier( Identifier { id: "true", span: Span { start: Position { line: 22, column: 19, }, end: Position { line: 22, column: 23, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "type", span: Span { start: Position { line: 23, column: 9, }, end: Position { line: 23, column: 13, }, }, }, ), ], to: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "types", span: Span { start: Position { line: 23, column: 16, }, end: Position { line: 23, column: 21, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "bool", span: Span { start: Position { line: 23, column: 22, }, end: Position { line: 23, column: 26, }, }, }, ), ], default: None, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "description", span: Span { start: Position { line: 24, column: 9, }, end: Position { line: 24, column: 20, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "lib", span: Span { start: Position { line: 24, column: 23, }, end: Position { line: 24, column: 26, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "mdDoc", span: Span { start: Position { line: 24, column: 27, }, end: Position { line: 24, column: 32, }, }, }, ), ], default: None, }, ), arguments: [ IndentedString( IndentedString { parts: [ Raw( PartRaw { content: "Whether users can log in with passwords defined in\n{file}`/etc/shadow`.\n", span: Span { start: Position { line: 25, column: 1, }, end: Position { line: 27, column: 9, }, }, }, ), ], span: Span { start: Position { line: 24, column: 33, }, end: Position { line: 27, column: 11, }, }, }, ), ], }, ), }, ), ], span: Span { start: Position { line: 21, column: 27, }, end: Position { line: 28, column: 8, }, }, }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "rootOK", span: Span { start: Position { line: 30, column: 7, }, end: Position { line: 30, column: 13, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "mkOption", span: Span { start: Position { line: 30, column: 16, }, end: Position { line: 30, column: 24, }, }, }, ), arguments: [ Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "default", span: Span { start: Position { line: 31, column: 9, }, end: Position { line: 31, column: 16, }, }, }, ), ], to: Identifier( Identifier { id: "false", span: Span { start: Position { line: 31, column: 19, }, end: Position { line: 31, column: 24, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "type", span: Span { start: Position { line: 32, column: 9, }, end: Position { line: 32, column: 13, }, }, }, ), ], to: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "types", span: Span { start: Position { line: 32, column: 16, }, end: Position { line: 32, column: 21, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "bool", span: Span { start: Position { line: 32, column: 22, }, end: Position { line: 32, column: 26, }, }, }, ), ], default: None, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "description", span: Span { start: Position { line: 33, column: 9, }, end: Position { line: 33, column: 20, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "lib", span: Span { start: Position { line: 33, column: 23, }, end: Position { line: 33, column: 26, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "mdDoc", span: Span { start: Position { line: 33, column: 27, }, end: Position { line: 33, column: 32, }, }, }, ), ], default: None, }, ), arguments: [ IndentedString( IndentedString { parts: [ Raw( PartRaw { content: "If set, root doesn't need to authenticate (e.g. for the\n{command}`useradd` service).\n", span: Span { start: Position { line: 34, column: 1, }, end: Position { line: 36, column: 9, }, }, }, ), ], span: Span { start: Position { line: 33, column: 33, }, end: Position { line: 36, column: 11, }, }, }, ), ], }, ), }, ), ], span: Span { start: Position { line: 30, column: 25, }, end: Position { line: 37, column: 8, }, }, }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "p11Auth", span: Span { start: Position { line: 39, column: 7, }, end: Position { line: 39, column: 14, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "mkOption", span: Span { start: Position { line: 39, column: 17, }, end: Position { line: 39, column: 25, }, }, }, ), arguments: [ Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "default", span: Span { start: Position { line: 40, column: 9, }, end: Position { line: 40, column: 16, }, }, }, ), ], to: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "config", span: Span { start: Position { line: 40, column: 19, }, end: Position { line: 40, column: 25, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "security", span: Span { start: Position { line: 40, column: 26, }, end: Position { line: 40, column: 34, }, }, }, ), Raw( PartRaw { content: "pam", span: Span { start: Position { line: 40, column: 35, }, end: Position { line: 40, column: 38, }, }, }, ), Raw( PartRaw { content: "p11", span: Span { start: Position { line: 40, column: 39, }, end: Position { line: 40, column: 42, }, }, }, ), Raw( PartRaw { content: "enable", span: Span { start: Position { line: 40, column: 43, }, end: Position { line: 40, column: 49, }, }, }, ), ], default: None, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "defaultText", span: Span { start: Position { line: 41, column: 9, }, end: Position { line: 41, column: 20, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "literalExpression", span: Span { start: Position { line: 41, column: 23, }, end: Position { line: 41, column: 40, }, }, }, ), arguments: [ String( String_ { parts: [ Raw( PartRaw { content: "config.security.pam.p11.enable", span: Span { start: Position { line: 41, column: 42, }, end: Position { line: 41, column: 72, }, }, }, ), ], span: Span { start: Position { line: 41, column: 41, }, end: Position { line: 41, column: 73, }, }, }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "type", span: Span { start: Position { line: 42, column: 9, }, end: Position { line: 42, column: 13, }, }, }, ), ], to: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "types", span: Span { start: Position { line: 42, column: 16, }, end: Position { line: 42, column: 21, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "bool", span: Span { start: Position { line: 42, column: 22, }, end: Position { line: 42, column: 26, }, }, }, ), ], default: None, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "description", span: Span { start: Position { line: 43, column: 9, }, end: Position { line: 43, column: 20, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "lib", span: Span { start: Position { line: 43, column: 23, }, end: Position { line: 43, column: 26, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "mdDoc", span: Span { start: Position { line: 43, column: 27, }, end: Position { line: 43, column: 32, }, }, }, ), ], default: None, }, ), arguments: [ IndentedString( IndentedString { parts: [ Raw( PartRaw { content: "If set, keys listed in\n{file}`~/.ssh/authorized_keys` and\n{file}`~/.eid/authorized_certificates`\ncan be used to log in with the associated PKCS#11 tokens.\n", span: Span { start: Position { line: 44, column: 1, }, end: Position { line: 48, column: 9, }, }, }, ), ], span: Span { start: Position { line: 43, column: 33, }, end: Position { line: 48, column: 11, }, }, }, ), ], }, ), }, ), ], span: Span { start: Position { line: 39, column: 26, }, end: Position { line: 49, column: 8, }, }, }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "u2fAuth", span: Span { start: Position { line: 51, column: 7, }, end: Position { line: 51, column: 14, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "mkOption", span: Span { start: Position { line: 51, column: 17, }, end: Position { line: 51, column: 25, }, }, }, ), arguments: [ Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "default", span: Span { start: Position { line: 52, column: 9, }, end: Position { line: 52, column: 16, }, }, }, ), ], to: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "config", span: Span { start: Position { line: 52, column: 19, }, end: Position { line: 52, column: 25, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "security", span: Span { start: Position { line: 52, column: 26, }, end: Position { line: 52, column: 34, }, }, }, ), Raw( PartRaw { content: "pam", span: Span { start: Position { line: 52, column: 35, }, end: Position { line: 52, column: 38, }, }, }, ), Raw( PartRaw { content: "u2f", span: Span { start: Position { line: 52, column: 39, }, end: Position { line: 52, column: 42, }, }, }, ), Raw( PartRaw { content: "enable", span: Span { start: Position { line: 52, column: 43, }, end: Position { line: 52, column: 49, }, }, }, ), ], default: None, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "defaultText", span: Span { start: Position { line: 53, column: 9, }, end: Position { line: 53, column: 20, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "literalExpression", span: Span { start: Position { line: 53, column: 23, }, end: Position { line: 53, column: 40, }, }, }, ), arguments: [ String( String_ { parts: [ Raw( PartRaw { content: "config.security.pam.u2f.enable", span: Span { start: Position { line: 53, column: 42, }, end: Position { line: 53, column: 72, }, }, }, ), ], span: Span { start: Position { line: 53, column: 41, }, end: Position { line: 53, column: 73, }, }, }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "type", span: Span { start: Position { line: 54, column: 9, }, end: Position { line: 54, column: 13, }, }, }, ), ], to: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "types", span: Span { start: Position { line: 54, column: 16, }, end: Position { line: 54, column: 21, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "bool", span: Span { start: Position { line: 54, column: 22, }, end: Position { line: 54, column: 26, }, }, }, ), ], default: None, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "description", span: Span { start: Position { line: 55, column: 9, }, end: Position { line: 55, column: 20, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "lib", span: Span { start: Position { line: 55, column: 23, }, end: Position { line: 55, column: 26, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "mdDoc", span: Span { start: Position { line: 55, column: 27, }, end: Position { line: 55, column: 32, }, }, }, ), ], default: None, }, ), arguments: [ IndentedString( IndentedString { parts: [ Raw( PartRaw { content: "If set, users listed in\n{file}`$XDG_CONFIG_HOME/Yubico/u2f_keys` (or\n{file}`$HOME/.config/Yubico/u2f_keys` if XDG variable is\nnot set) are able to log in with the associated U2F key. Path can be\nchanged using {option}`security.pam.u2f.authFile` option.\n", span: Span { start: Position { line: 56, column: 1, }, end: Position { line: 61, column: 9, }, }, }, ), ], span: Span { start: Position { line: 55, column: 33, }, end: Position { line: 61, column: 11, }, }, }, ), ], }, ), }, ), ], span: Span { start: Position { line: 51, column: 26, }, end: Position { line: 62, column: 8, }, }, }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "usshAuth", span: Span { start: Position { line: 64, column: 7, }, end: Position { line: 64, column: 15, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "mkOption", span: Span { start: Position { line: 64, column: 18, }, end: Position { line: 64, column: 26, }, }, }, ), arguments: [ Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "default", span: Span { start: Position { line: 65, column: 9, }, end: Position { line: 65, column: 16, }, }, }, ), ], to: Identifier( Identifier { id: "false", span: Span { start: Position { line: 65, column: 19, }, end: Position { line: 65, column: 24, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "type", span: Span { start: Position { line: 66, column: 9, }, end: Position { line: 66, column: 13, }, }, }, ), ], to: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "types", span: Span { start: Position { line: 66, column: 16, }, end: Position { line: 66, column: 21, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "bool", span: Span { start: Position { line: 66, column: 22, }, end: Position { line: 66, column: 26, }, }, }, ), ], default: None, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "description", span: Span { start: Position { line: 67, column: 9, }, end: Position { line: 67, column: 20, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "lib", span: Span { start: Position { line: 67, column: 23, }, end: Position { line: 67, column: 26, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "mdDoc", span: Span { start: Position { line: 67, column: 27, }, end: Position { line: 67, column: 32, }, }, }, ), ], default: None, }, ), arguments: [ IndentedString( IndentedString { parts: [ Raw( PartRaw { content: "If set, users with an SSH certificate containing an authorized principal\nin their SSH agent are able to log in. Specific options are controlled\nusing the {option}`security.pam.ussh` options.\n\nNote that the {option}`security.pam.ussh.enable` must also be\nset for this option to take effect.\n", span: Span { start: Position { line: 68, column: 1, }, end: Position { line: 74, column: 9, }, }, }, ), ], span: Span { start: Position { line: 67, column: 33, }, end: Position { line: 74, column: 11, }, }, }, ), ], }, ), }, ), ], span: Span { start: Position { line: 64, column: 27, }, end: Position { line: 75, column: 8, }, }, }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "yubicoAuth", span: Span { start: Position { line: 77, column: 7, }, end: Position { line: 77, column: 17, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "mkOption", span: Span { start: Position { line: 77, column: 20, }, end: Position { line: 77, column: 28, }, }, }, ), arguments: [ Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "default", span: Span { start: Position { line: 78, column: 9, }, end: Position { line: 78, column: 16, }, }, }, ), ], to: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "config", span: Span { start: Position { line: 78, column: 19, }, end: Position { line: 78, column: 25, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "security", span: Span { start: Position { line: 78, column: 26, }, end: Position { line: 78, column: 34, }, }, }, ), Raw( PartRaw { content: "pam", span: Span { start: Position { line: 78, column: 35, }, end: Position { line: 78, column: 38, }, }, }, ), Raw( PartRaw { content: "yubico", span: Span { start: Position { line: 78, column: 39, }, end: Position { line: 78, column: 45, }, }, }, ), Raw( PartRaw { content: "enable", span: Span { start: Position { line: 78, column: 46, }, end: Position { line: 78, column: 52, }, }, }, ), ], default: None, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "defaultText", span: Span { start: Position { line: 79, column: 9, }, end: Position { line: 79, column: 20, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "literalExpression", span: Span { start: Position { line: 79, column: 23, }, end: Position { line: 79, column: 40, }, }, }, ), arguments: [ String( String_ { parts: [ Raw( PartRaw { content: "config.security.pam.yubico.enable", span: Span { start: Position { line: 79, column: 42, }, end: Position { line: 79, column: 75, }, }, }, ), ], span: Span { start: Position { line: 79, column: 41, }, end: Position { line: 79, column: 76, }, }, }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "type", span: Span { start: Position { line: 80, column: 9, }, end: Position { line: 80, column: 13, }, }, }, ), ], to: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "types", span: Span { start: Position { line: 80, column: 16, }, end: Position { line: 80, column: 21, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "bool", span: Span { start: Position { line: 80, column: 22, }, end: Position { line: 80, column: 26, }, }, }, ), ], default: None, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "description", span: Span { start: Position { line: 81, column: 9, }, end: Position { line: 81, column: 20, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "lib", span: Span { start: Position { line: 81, column: 23, }, end: Position { line: 81, column: 26, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "mdDoc", span: Span { start: Position { line: 81, column: 27, }, end: Position { line: 81, column: 32, }, }, }, ), ], default: None, }, ), arguments: [ IndentedString( IndentedString { parts: [ Raw( PartRaw { content: "If set, users listed in\n{file}`~/.yubico/authorized_yubikeys`\nare able to log in with the associated Yubikey tokens.\n", span: Span { start: Position { line: 82, column: 1, }, end: Position { line: 85, column: 9, }, }, }, ), ], span: Span { start: Position { line: 81, column: 33, }, end: Position { line: 85, column: 11, }, }, }, ), ], }, ), }, ), ], span: Span { start: Position { line: 77, column: 29, }, end: Position { line: 86, column: 8, }, }, }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "googleAuthenticator", span: Span { start: Position { line: 88, column: 7, }, end: Position { line: 88, column: 26, }, }, }, ), ], to: Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "enable", span: Span { start: Position { line: 89, column: 9, }, end: Position { line: 89, column: 15, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "mkOption", span: Span { start: Position { line: 89, column: 18, }, end: Position { line: 89, column: 26, }, }, }, ), arguments: [ Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "default", span: Span { start: Position { line: 90, column: 11, }, end: Position { line: 90, column: 18, }, }, }, ), ], to: Identifier( Identifier { id: "false", span: Span { start: Position { line: 90, column: 21, }, end: Position { line: 90, column: 26, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "type", span: Span { start: Position { line: 91, column: 11, }, end: Position { line: 91, column: 15, }, }, }, ), ], to: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "types", span: Span { start: Position { line: 91, column: 18, }, end: Position { line: 91, column: 23, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "bool", span: Span { start: Position { line: 91, column: 24, }, end: Position { line: 91, column: 28, }, }, }, ), ], default: None, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "description", span: Span { start: Position { line: 92, column: 11, }, end: Position { line: 92, column: 22, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "lib", span: Span { start: Position { line: 92, column: 25, }, end: Position { line: 92, column: 28, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "mdDoc", span: Span { start: Position { line: 92, column: 29, }, end: Position { line: 92, column: 34, }, }, }, ), ], default: None, }, ), arguments: [ IndentedString( IndentedString { parts: [ Raw( PartRaw { content: "If set, users with enabled Google Authenticator (created\n{file}`~/.google_authenticator`) will be required\nto provide Google Authenticator token to log in.\n", span: Span { start: Position { line: 93, column: 1, }, end: Position { line: 96, column: 11, }, }, }, ), ], span: Span { start: Position { line: 92, column: 35, }, end: Position { line: 96, column: 13, }, }, }, ), ], }, ), }, ), ], span: Span { start: Position { line: 89, column: 27, }, end: Position { line: 97, column: 10, }, }, }, ), ], }, ), }, ), ], span: Span { start: Position { line: 88, column: 29, }, end: Position { line: 98, column: 8, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "usbAuth", span: Span { start: Position { line: 100, column: 7, }, end: Position { line: 100, column: 14, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "mkOption", span: Span { start: Position { line: 100, column: 17, }, end: Position { line: 100, column: 25, }, }, }, ), arguments: [ Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "default", span: Span { start: Position { line: 101, column: 9, }, end: Position { line: 101, column: 16, }, }, }, ), ], to: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "config", span: Span { start: Position { line: 101, column: 19, }, end: Position { line: 101, column: 25, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "security", span: Span { start: Position { line: 101, column: 26, }, end: Position { line: 101, column: 34, }, }, }, ), Raw( PartRaw { content: "pam", span: Span { start: Position { line: 101, column: 35, }, end: Position { line: 101, column: 38, }, }, }, ), Raw( PartRaw { content: "usb", span: Span { start: Position { line: 101, column: 39, }, end: Position { line: 101, column: 42, }, }, }, ), Raw( PartRaw { content: "enable", span: Span { start: Position { line: 101, column: 43, }, end: Position { line: 101, column: 49, }, }, }, ), ], default: None, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "defaultText", span: Span { start: Position { line: 102, column: 9, }, end: Position { line: 102, column: 20, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "literalExpression", span: Span { start: Position { line: 102, column: 23, }, end: Position { line: 102, column: 40, }, }, }, ), arguments: [ String( String_ { parts: [ Raw( PartRaw { content: "config.security.pam.usb.enable", span: Span { start: Position { line: 102, column: 42, }, end: Position { line: 102, column: 72, }, }, }, ), ], span: Span { start: Position { line: 102, column: 41, }, end: Position { line: 102, column: 73, }, }, }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "type", span: Span { start: Position { line: 103, column: 9, }, end: Position { line: 103, column: 13, }, }, }, ), ], to: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "types", span: Span { start: Position { line: 103, column: 16, }, end: Position { line: 103, column: 21, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "bool", span: Span { start: Position { line: 103, column: 22, }, end: Position { line: 103, column: 26, }, }, }, ), ], default: None, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "description", span: Span { start: Position { line: 104, column: 9, }, end: Position { line: 104, column: 20, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "lib", span: Span { start: Position { line: 104, column: 23, }, end: Position { line: 104, column: 26, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "mdDoc", span: Span { start: Position { line: 104, column: 27, }, end: Position { line: 104, column: 32, }, }, }, ), ], default: None, }, ), arguments: [ IndentedString( IndentedString { parts: [ Raw( PartRaw { content: "If set, users listed in\n{file}`/etc/pamusb.conf` are able to log in\nwith the associated USB key.\n", span: Span { start: Position { line: 105, column: 1, }, end: Position { line: 108, column: 9, }, }, }, ), ], span: Span { start: Position { line: 104, column: 33, }, end: Position { line: 108, column: 11, }, }, }, ), ], }, ), }, ), ], span: Span { start: Position { line: 100, column: 26, }, end: Position { line: 109, column: 8, }, }, }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "otpwAuth", span: Span { start: Position { line: 111, column: 7, }, end: Position { line: 111, column: 15, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "mkOption", span: Span { start: Position { line: 111, column: 18, }, end: Position { line: 111, column: 26, }, }, }, ), arguments: [ Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "default", span: Span { start: Position { line: 112, column: 9, }, end: Position { line: 112, column: 16, }, }, }, ), ], to: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "config", span: Span { start: Position { line: 112, column: 19, }, end: Position { line: 112, column: 25, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "security", span: Span { start: Position { line: 112, column: 26, }, end: Position { line: 112, column: 34, }, }, }, ), Raw( PartRaw { content: "pam", span: Span { start: Position { line: 112, column: 35, }, end: Position { line: 112, column: 38, }, }, }, ), Raw( PartRaw { content: "enableOTPW", span: Span { start: Position { line: 112, column: 39, }, end: Position { line: 112, column: 49, }, }, }, ), ], default: None, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "defaultText", span: Span { start: Position { line: 113, column: 9, }, end: Position { line: 113, column: 20, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "literalExpression", span: Span { start: Position { line: 113, column: 23, }, end: Position { line: 113, column: 40, }, }, }, ), arguments: [ String( String_ { parts: [ Raw( PartRaw { content: "config.security.pam.enableOTPW", span: Span { start: Position { line: 113, column: 42, }, end: Position { line: 113, column: 72, }, }, }, ), ], span: Span { start: Position { line: 113, column: 41, }, end: Position { line: 113, column: 73, }, }, }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "type", span: Span { start: Position { line: 114, column: 9, }, end: Position { line: 114, column: 13, }, }, }, ), ], to: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "types", span: Span { start: Position { line: 114, column: 16, }, end: Position { line: 114, column: 21, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "bool", span: Span { start: Position { line: 114, column: 22, }, end: Position { line: 114, column: 26, }, }, }, ), ], default: None, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "description", span: Span { start: Position { line: 115, column: 9, }, end: Position { line: 115, column: 20, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "lib", span: Span { start: Position { line: 115, column: 23, }, end: Position { line: 115, column: 26, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "mdDoc", span: Span { start: Position { line: 115, column: 27, }, end: Position { line: 115, column: 32, }, }, }, ), ], default: None, }, ), arguments: [ IndentedString( IndentedString { parts: [ Raw( PartRaw { content: "If set, the OTPW system will be used (if\n{file}`~/.otpw` exists).\n", span: Span { start: Position { line: 116, column: 1, }, end: Position { line: 118, column: 9, }, }, }, ), ], span: Span { start: Position { line: 115, column: 33, }, end: Position { line: 118, column: 11, }, }, }, ), ], }, ), }, ), ], span: Span { start: Position { line: 111, column: 27, }, end: Position { line: 119, column: 8, }, }, }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "googleOsLoginAccountVerification", span: Span { start: Position { line: 121, column: 7, }, end: Position { line: 121, column: 39, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "mkOption", span: Span { start: Position { line: 121, column: 42, }, end: Position { line: 121, column: 50, }, }, }, ), arguments: [ Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "default", span: Span { start: Position { line: 122, column: 9, }, end: Position { line: 122, column: 16, }, }, }, ), ], to: Identifier( Identifier { id: "false", span: Span { start: Position { line: 122, column: 19, }, end: Position { line: 122, column: 24, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "type", span: Span { start: Position { line: 123, column: 9, }, end: Position { line: 123, column: 13, }, }, }, ), ], to: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "types", span: Span { start: Position { line: 123, column: 16, }, end: Position { line: 123, column: 21, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "bool", span: Span { start: Position { line: 123, column: 22, }, end: Position { line: 123, column: 26, }, }, }, ), ], default: None, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "description", span: Span { start: Position { line: 124, column: 9, }, end: Position { line: 124, column: 20, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "lib", span: Span { start: Position { line: 124, column: 23, }, end: Position { line: 124, column: 26, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "mdDoc", span: Span { start: Position { line: 124, column: 27, }, end: Position { line: 124, column: 32, }, }, }, ), ], default: None, }, ), arguments: [ IndentedString( IndentedString { parts: [ Raw( PartRaw { content: "If set, will use the Google OS Login PAM modules\n(`pam_oslogin_login`,\n`pam_oslogin_admin`) to verify possible OS Login\nusers and set sudoers configuration accordingly.\nThis only makes sense to enable for the `sshd` PAM\nservice.\n", span: Span { start: Position { line: 125, column: 1, }, end: Position { line: 131, column: 9, }, }, }, ), ], span: Span { start: Position { line: 124, column: 33, }, end: Position { line: 131, column: 11, }, }, }, ), ], }, ), }, ), ], span: Span { start: Position { line: 121, column: 51, }, end: Position { line: 132, column: 8, }, }, }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "googleOsLoginAuthentication", span: Span { start: Position { line: 134, column: 7, }, end: Position { line: 134, column: 34, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "mkOption", span: Span { start: Position { line: 134, column: 37, }, end: Position { line: 134, column: 45, }, }, }, ), arguments: [ Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "default", span: Span { start: Position { line: 135, column: 9, }, end: Position { line: 135, column: 16, }, }, }, ), ], to: Identifier( Identifier { id: "false", span: Span { start: Position { line: 135, column: 19, }, end: Position { line: 135, column: 24, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "type", span: Span { start: Position { line: 136, column: 9, }, end: Position { line: 136, column: 13, }, }, }, ), ], to: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "types", span: Span { start: Position { line: 136, column: 16, }, end: Position { line: 136, column: 21, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "bool", span: Span { start: Position { line: 136, column: 22, }, end: Position { line: 136, column: 26, }, }, }, ), ], default: None, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "description", span: Span { start: Position { line: 137, column: 9, }, end: Position { line: 137, column: 20, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "lib", span: Span { start: Position { line: 137, column: 23, }, end: Position { line: 137, column: 26, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "mdDoc", span: Span { start: Position { line: 137, column: 27, }, end: Position { line: 137, column: 32, }, }, }, ), ], default: None, }, ), arguments: [ IndentedString( IndentedString { parts: [ Raw( PartRaw { content: "If set, will use the `pam_oslogin_login`'s user\nauthentication methods to authenticate users using 2FA.\nThis only makes sense to enable for the `sshd` PAM\nservice.\n", span: Span { start: Position { line: 138, column: 1, }, end: Position { line: 142, column: 9, }, }, }, ), ], span: Span { start: Position { line: 137, column: 33, }, end: Position { line: 142, column: 11, }, }, }, ), ], }, ), }, ), ], span: Span { start: Position { line: 134, column: 46, }, end: Position { line: 143, column: 8, }, }, }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "mysqlAuth", span: Span { start: Position { line: 145, column: 7, }, end: Position { line: 145, column: 16, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "mkOption", span: Span { start: Position { line: 145, column: 19, }, end: Position { line: 145, column: 27, }, }, }, ), arguments: [ Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "default", span: Span { start: Position { line: 146, column: 9, }, end: Position { line: 146, column: 16, }, }, }, ), ], to: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "config", span: Span { start: Position { line: 146, column: 19, }, end: Position { line: 146, column: 25, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "users", span: Span { start: Position { line: 146, column: 26, }, end: Position { line: 146, column: 31, }, }, }, ), Raw( PartRaw { content: "mysql", span: Span { start: Position { line: 146, column: 32, }, end: Position { line: 146, column: 37, }, }, }, ), Raw( PartRaw { content: "enable", span: Span { start: Position { line: 146, column: 38, }, end: Position { line: 146, column: 44, }, }, }, ), ], default: None, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "defaultText", span: Span { start: Position { line: 147, column: 9, }, end: Position { line: 147, column: 20, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "literalExpression", span: Span { start: Position { line: 147, column: 23, }, end: Position { line: 147, column: 40, }, }, }, ), arguments: [ String( String_ { parts: [ Raw( PartRaw { content: "config.users.mysql.enable", span: Span { start: Position { line: 147, column: 42, }, end: Position { line: 147, column: 67, }, }, }, ), ], span: Span { start: Position { line: 147, column: 41, }, end: Position { line: 147, column: 68, }, }, }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "type", span: Span { start: Position { line: 148, column: 9, }, end: Position { line: 148, column: 13, }, }, }, ), ], to: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "types", span: Span { start: Position { line: 148, column: 16, }, end: Position { line: 148, column: 21, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "bool", span: Span { start: Position { line: 148, column: 22, }, end: Position { line: 148, column: 26, }, }, }, ), ], default: None, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "description", span: Span { start: Position { line: 149, column: 9, }, end: Position { line: 149, column: 20, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "lib", span: Span { start: Position { line: 149, column: 23, }, end: Position { line: 149, column: 26, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "mdDoc", span: Span { start: Position { line: 149, column: 27, }, end: Position { line: 149, column: 32, }, }, }, ), ], default: None, }, ), arguments: [ IndentedString( IndentedString { parts: [ Raw( PartRaw { content: "If set, the `pam_mysql` module will be used to\nauthenticate users against a MySQL/MariaDB database.\n", span: Span { start: Position { line: 150, column: 1, }, end: Position { line: 152, column: 9, }, }, }, ), ], span: Span { start: Position { line: 149, column: 33, }, end: Position { line: 152, column: 11, }, }, }, ), ], }, ), }, ), ], span: Span { start: Position { line: 145, column: 28, }, end: Position { line: 153, column: 8, }, }, }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "fprintAuth", span: Span { start: Position { line: 155, column: 7, }, end: Position { line: 155, column: 17, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "mkOption", span: Span { start: Position { line: 155, column: 20, }, end: Position { line: 155, column: 28, }, }, }, ), arguments: [ Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "default", span: Span { start: Position { line: 156, column: 9, }, end: Position { line: 156, column: 16, }, }, }, ), ], to: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "config", span: Span { start: Position { line: 156, column: 19, }, end: Position { line: 156, column: 25, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "services", span: Span { start: Position { line: 156, column: 26, }, end: Position { line: 156, column: 34, }, }, }, ), Raw( PartRaw { content: "fprintd", span: Span { start: Position { line: 156, column: 35, }, end: Position { line: 156, column: 42, }, }, }, ), Raw( PartRaw { content: "enable", span: Span { start: Position { line: 156, column: 43, }, end: Position { line: 156, column: 49, }, }, }, ), ], default: None, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "defaultText", span: Span { start: Position { line: 157, column: 9, }, end: Position { line: 157, column: 20, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "literalExpression", span: Span { start: Position { line: 157, column: 23, }, end: Position { line: 157, column: 40, }, }, }, ), arguments: [ String( String_ { parts: [ Raw( PartRaw { content: "config.services.fprintd.enable", span: Span { start: Position { line: 157, column: 42, }, end: Position { line: 157, column: 72, }, }, }, ), ], span: Span { start: Position { line: 157, column: 41, }, end: Position { line: 157, column: 73, }, }, }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "type", span: Span { start: Position { line: 158, column: 9, }, end: Position { line: 158, column: 13, }, }, }, ), ], to: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "types", span: Span { start: Position { line: 158, column: 16, }, end: Position { line: 158, column: 21, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "bool", span: Span { start: Position { line: 158, column: 22, }, end: Position { line: 158, column: 26, }, }, }, ), ], default: None, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "description", span: Span { start: Position { line: 159, column: 9, }, end: Position { line: 159, column: 20, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "lib", span: Span { start: Position { line: 159, column: 23, }, end: Position { line: 159, column: 26, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "mdDoc", span: Span { start: Position { line: 159, column: 27, }, end: Position { line: 159, column: 32, }, }, }, ), ], default: None, }, ), arguments: [ IndentedString( IndentedString { parts: [ Raw( PartRaw { content: "If set, fingerprint reader will be used (if exists and\nyour fingerprints are enrolled).\n", span: Span { start: Position { line: 160, column: 1, }, end: Position { line: 162, column: 9, }, }, }, ), ], span: Span { start: Position { line: 159, column: 33, }, end: Position { line: 162, column: 11, }, }, }, ), ], }, ), }, ), ], span: Span { start: Position { line: 155, column: 29, }, end: Position { line: 163, column: 8, }, }, }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "oathAuth", span: Span { start: Position { line: 165, column: 7, }, end: Position { line: 165, column: 15, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "mkOption", span: Span { start: Position { line: 165, column: 18, }, end: Position { line: 165, column: 26, }, }, }, ), arguments: [ Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "default", span: Span { start: Position { line: 166, column: 9, }, end: Position { line: 166, column: 16, }, }, }, ), ], to: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "config", span: Span { start: Position { line: 166, column: 19, }, end: Position { line: 166, column: 25, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "security", span: Span { start: Position { line: 166, column: 26, }, end: Position { line: 166, column: 34, }, }, }, ), Raw( PartRaw { content: "pam", span: Span { start: Position { line: 166, column: 35, }, end: Position { line: 166, column: 38, }, }, }, ), Raw( PartRaw { content: "oath", span: Span { start: Position { line: 166, column: 39, }, end: Position { line: 166, column: 43, }, }, }, ), Raw( PartRaw { content: "enable", span: Span { start: Position { line: 166, column: 44, }, end: Position { line: 166, column: 50, }, }, }, ), ], default: None, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "defaultText", span: Span { start: Position { line: 167, column: 9, }, end: Position { line: 167, column: 20, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "literalExpression", span: Span { start: Position { line: 167, column: 23, }, end: Position { line: 167, column: 40, }, }, }, ), arguments: [ String( String_ { parts: [ Raw( PartRaw { content: "config.security.pam.oath.enable", span: Span { start: Position { line: 167, column: 42, }, end: Position { line: 167, column: 73, }, }, }, ), ], span: Span { start: Position { line: 167, column: 41, }, end: Position { line: 167, column: 74, }, }, }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "type", span: Span { start: Position { line: 168, column: 9, }, end: Position { line: 168, column: 13, }, }, }, ), ], to: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "types", span: Span { start: Position { line: 168, column: 16, }, end: Position { line: 168, column: 21, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "bool", span: Span { start: Position { line: 168, column: 22, }, end: Position { line: 168, column: 26, }, }, }, ), ], default: None, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "description", span: Span { start: Position { line: 169, column: 9, }, end: Position { line: 169, column: 20, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "lib", span: Span { start: Position { line: 169, column: 23, }, end: Position { line: 169, column: 26, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "mdDoc", span: Span { start: Position { line: 169, column: 27, }, end: Position { line: 169, column: 32, }, }, }, ), ], default: None, }, ), arguments: [ IndentedString( IndentedString { parts: [ Raw( PartRaw { content: "If set, the OATH Toolkit will be used.\n", span: Span { start: Position { line: 170, column: 1, }, end: Position { line: 171, column: 9, }, }, }, ), ], span: Span { start: Position { line: 169, column: 33, }, end: Position { line: 171, column: 11, }, }, }, ), ], }, ), }, ), ], span: Span { start: Position { line: 165, column: 27, }, end: Position { line: 172, column: 8, }, }, }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "sshAgentAuth", span: Span { start: Position { line: 174, column: 7, }, end: Position { line: 174, column: 19, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "mkOption", span: Span { start: Position { line: 174, column: 22, }, end: Position { line: 174, column: 30, }, }, }, ), arguments: [ Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "default", span: Span { start: Position { line: 175, column: 9, }, end: Position { line: 175, column: 16, }, }, }, ), ], to: Identifier( Identifier { id: "false", span: Span { start: Position { line: 175, column: 19, }, end: Position { line: 175, column: 24, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "type", span: Span { start: Position { line: 176, column: 9, }, end: Position { line: 176, column: 13, }, }, }, ), ], to: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "types", span: Span { start: Position { line: 176, column: 16, }, end: Position { line: 176, column: 21, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "bool", span: Span { start: Position { line: 176, column: 22, }, end: Position { line: 176, column: 26, }, }, }, ), ], default: None, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "description", span: Span { start: Position { line: 177, column: 9, }, end: Position { line: 177, column: 20, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "lib", span: Span { start: Position { line: 177, column: 23, }, end: Position { line: 177, column: 26, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "mdDoc", span: Span { start: Position { line: 177, column: 27, }, end: Position { line: 177, column: 32, }, }, }, ), ], default: None, }, ), arguments: [ IndentedString( IndentedString { parts: [ Raw( PartRaw { content: "If set, the calling user's SSH agent is used to authenticate\nagainst the keys in the calling user's\n{file}`~/.ssh/authorized_keys`. This is useful\nfor {command}`sudo` on password-less remote systems.\n", span: Span { start: Position { line: 178, column: 1, }, end: Position { line: 182, column: 9, }, }, }, ), ], span: Span { start: Position { line: 177, column: 33, }, end: Position { line: 182, column: 11, }, }, }, ), ], }, ), }, ), ], span: Span { start: Position { line: 174, column: 31, }, end: Position { line: 183, column: 8, }, }, }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "duoSecurity", span: Span { start: Position { line: 185, column: 7, }, end: Position { line: 185, column: 18, }, }, }, ), ], to: Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "enable", span: Span { start: Position { line: 186, column: 9, }, end: Position { line: 186, column: 15, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "mkOption", span: Span { start: Position { line: 186, column: 18, }, end: Position { line: 186, column: 26, }, }, }, ), arguments: [ Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "default", span: Span { start: Position { line: 187, column: 11, }, end: Position { line: 187, column: 18, }, }, }, ), ], to: Identifier( Identifier { id: "false", span: Span { start: Position { line: 187, column: 21, }, end: Position { line: 187, column: 26, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "type", span: Span { start: Position { line: 188, column: 11, }, end: Position { line: 188, column: 15, }, }, }, ), ], to: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "types", span: Span { start: Position { line: 188, column: 18, }, end: Position { line: 188, column: 23, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "bool", span: Span { start: Position { line: 188, column: 24, }, end: Position { line: 188, column: 28, }, }, }, ), ], default: None, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "description", span: Span { start: Position { line: 189, column: 11, }, end: Position { line: 189, column: 22, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "lib", span: Span { start: Position { line: 189, column: 25, }, end: Position { line: 189, column: 28, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "mdDoc", span: Span { start: Position { line: 189, column: 29, }, end: Position { line: 189, column: 34, }, }, }, ), ], default: None, }, ), arguments: [ IndentedString( IndentedString { parts: [ Raw( PartRaw { content: "If set, use the Duo Security pam module\n`pam_duo` for authentication. Requires\nconfiguration of {option}`security.duosec` options.\n", span: Span { start: Position { line: 190, column: 1, }, end: Position { line: 193, column: 11, }, }, }, ), ], span: Span { start: Position { line: 189, column: 35, }, end: Position { line: 193, column: 13, }, }, }, ), ], }, ), }, ), ], span: Span { start: Position { line: 186, column: 27, }, end: Position { line: 194, column: 10, }, }, }, ), ], }, ), }, ), ], span: Span { start: Position { line: 185, column: 21, }, end: Position { line: 195, column: 8, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "startSession", span: Span { start: Position { line: 197, column: 7, }, end: Position { line: 197, column: 19, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "mkOption", span: Span { start: Position { line: 197, column: 22, }, end: Position { line: 197, column: 30, }, }, }, ), arguments: [ Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "default", span: Span { start: Position { line: 198, column: 9, }, end: Position { line: 198, column: 16, }, }, }, ), ], to: Identifier( Identifier { id: "false", span: Span { start: Position { line: 198, column: 19, }, end: Position { line: 198, column: 24, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "type", span: Span { start: Position { line: 199, column: 9, }, end: Position { line: 199, column: 13, }, }, }, ), ], to: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "types", span: Span { start: Position { line: 199, column: 16, }, end: Position { line: 199, column: 21, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "bool", span: Span { start: Position { line: 199, column: 22, }, end: Position { line: 199, column: 26, }, }, }, ), ], default: None, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "description", span: Span { start: Position { line: 200, column: 9, }, end: Position { line: 200, column: 20, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "lib", span: Span { start: Position { line: 200, column: 23, }, end: Position { line: 200, column: 26, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "mdDoc", span: Span { start: Position { line: 200, column: 27, }, end: Position { line: 200, column: 32, }, }, }, ), ], default: None, }, ), arguments: [ IndentedString( IndentedString { parts: [ Raw( PartRaw { content: "If set, the service will register a new session with\nsystemd's login manager. For local sessions, this will give\nthe user access to audio devices, CD-ROM drives. In the\ndefault PolicyKit configuration, it also allows the user to\nreboot the system.\n", span: Span { start: Position { line: 201, column: 1, }, end: Position { line: 206, column: 9, }, }, }, ), ], span: Span { start: Position { line: 200, column: 33, }, end: Position { line: 206, column: 11, }, }, }, ), ], }, ), }, ), ], span: Span { start: Position { line: 197, column: 31, }, end: Position { line: 207, column: 8, }, }, }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "setEnvironment", span: Span { start: Position { line: 209, column: 7, }, end: Position { line: 209, column: 21, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "mkOption", span: Span { start: Position { line: 209, column: 24, }, end: Position { line: 209, column: 32, }, }, }, ), arguments: [ Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "type", span: Span { start: Position { line: 210, column: 9, }, end: Position { line: 210, column: 13, }, }, }, ), ], to: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "types", span: Span { start: Position { line: 210, column: 16, }, end: Position { line: 210, column: 21, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "bool", span: Span { start: Position { line: 210, column: 22, }, end: Position { line: 210, column: 26, }, }, }, ), ], default: None, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "default", span: Span { start: Position { line: 211, column: 9, }, end: Position { line: 211, column: 16, }, }, }, ), ], to: Identifier( Identifier { id: "true", span: Span { start: Position { line: 211, column: 19, }, end: Position { line: 211, column: 23, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "description", span: Span { start: Position { line: 212, column: 9, }, end: Position { line: 212, column: 20, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "lib", span: Span { start: Position { line: 212, column: 23, }, end: Position { line: 212, column: 26, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "mdDoc", span: Span { start: Position { line: 212, column: 27, }, end: Position { line: 212, column: 32, }, }, }, ), ], default: None, }, ), arguments: [ IndentedString( IndentedString { parts: [ Raw( PartRaw { content: "Whether the service should set the environment variables\nlisted in {option}`environment.sessionVariables`\nusing `pam_env.so`.\n", span: Span { start: Position { line: 213, column: 1, }, end: Position { line: 216, column: 9, }, }, }, ), ], span: Span { start: Position { line: 212, column: 33, }, end: Position { line: 216, column: 11, }, }, }, ), ], }, ), }, ), ], span: Span { start: Position { line: 209, column: 33, }, end: Position { line: 217, column: 8, }, }, }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "setLoginUid", span: Span { start: Position { line: 219, column: 7, }, end: Position { line: 219, column: 18, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "mkOption", span: Span { start: Position { line: 219, column: 21, }, end: Position { line: 219, column: 29, }, }, }, ), arguments: [ Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "type", span: Span { start: Position { line: 220, column: 9, }, end: Position { line: 220, column: 13, }, }, }, ), ], to: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "types", span: Span { start: Position { line: 220, column: 16, }, end: Position { line: 220, column: 21, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "bool", span: Span { start: Position { line: 220, column: 22, }, end: Position { line: 220, column: 26, }, }, }, ), ], default: None, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "description", span: Span { start: Position { line: 221, column: 9, }, end: Position { line: 221, column: 20, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "lib", span: Span { start: Position { line: 221, column: 23, }, end: Position { line: 221, column: 26, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "mdDoc", span: Span { start: Position { line: 221, column: 27, }, end: Position { line: 221, column: 32, }, }, }, ), ], default: None, }, ), arguments: [ IndentedString( IndentedString { parts: [ Raw( PartRaw { content: "Set the login uid of the process\n({file}`/proc/self/loginuid`) for auditing\npurposes. The login uid is only set by ‘entry points’ like\n{command}`login` and {command}`sshd`, not by\ncommands like {command}`sudo`.\n", span: Span { start: Position { line: 222, column: 1, }, end: Position { line: 227, column: 9, }, }, }, ), ], span: Span { start: Position { line: 221, column: 33, }, end: Position { line: 227, column: 11, }, }, }, ), ], }, ), }, ), ], span: Span { start: Position { line: 219, column: 30, }, end: Position { line: 228, column: 8, }, }, }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "ttyAudit", span: Span { start: Position { line: 230, column: 7, }, end: Position { line: 230, column: 15, }, }, }, ), ], to: Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "enable", span: Span { start: Position { line: 231, column: 9, }, end: Position { line: 231, column: 15, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "mkOption", span: Span { start: Position { line: 231, column: 18, }, end: Position { line: 231, column: 26, }, }, }, ), arguments: [ Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "type", span: Span { start: Position { line: 232, column: 11, }, end: Position { line: 232, column: 15, }, }, }, ), ], to: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "types", span: Span { start: Position { line: 232, column: 18, }, end: Position { line: 232, column: 23, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "bool", span: Span { start: Position { line: 232, column: 24, }, end: Position { line: 232, column: 28, }, }, }, ), ], default: None, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "default", span: Span { start: Position { line: 233, column: 11, }, end: Position { line: 233, column: 18, }, }, }, ), ], to: Identifier( Identifier { id: "false", span: Span { start: Position { line: 233, column: 21, }, end: Position { line: 233, column: 26, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "description", span: Span { start: Position { line: 234, column: 11, }, end: Position { line: 234, column: 22, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "lib", span: Span { start: Position { line: 234, column: 25, }, end: Position { line: 234, column: 28, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "mdDoc", span: Span { start: Position { line: 234, column: 29, }, end: Position { line: 234, column: 34, }, }, }, ), ], default: None, }, ), arguments: [ IndentedString( IndentedString { parts: [ Raw( PartRaw { content: "Enable or disable TTY auditing for specified users\n", span: Span { start: Position { line: 235, column: 1, }, end: Position { line: 236, column: 11, }, }, }, ), ], span: Span { start: Position { line: 234, column: 35, }, end: Position { line: 236, column: 13, }, }, }, ), ], }, ), }, ), ], span: Span { start: Position { line: 231, column: 27, }, end: Position { line: 237, column: 10, }, }, }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "enablePattern", span: Span { start: Position { line: 239, column: 9, }, end: Position { line: 239, column: 22, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "mkOption", span: Span { start: Position { line: 239, column: 25, }, end: Position { line: 239, column: 33, }, }, }, ), arguments: [ Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "type", span: Span { start: Position { line: 240, column: 11, }, end: Position { line: 240, column: 15, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "types", span: Span { start: Position { line: 240, column: 18, }, end: Position { line: 240, column: 23, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "nullOr", span: Span { start: Position { line: 240, column: 24, }, end: Position { line: 240, column: 30, }, }, }, ), ], default: None, }, ), arguments: [ PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "types", span: Span { start: Position { line: 240, column: 31, }, end: Position { line: 240, column: 36, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "str", span: Span { start: Position { line: 240, column: 37, }, end: Position { line: 240, column: 40, }, }, }, ), ], default: None, }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "default", span: Span { start: Position { line: 241, column: 11, }, end: Position { line: 241, column: 18, }, }, }, ), ], to: Identifier( Identifier { id: "null", span: Span { start: Position { line: 241, column: 21, }, end: Position { line: 241, column: 25, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "description", span: Span { start: Position { line: 242, column: 11, }, end: Position { line: 242, column: 22, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "lib", span: Span { start: Position { line: 242, column: 25, }, end: Position { line: 242, column: 28, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "mdDoc", span: Span { start: Position { line: 242, column: 29, }, end: Position { line: 242, column: 34, }, }, }, ), ], default: None, }, ), arguments: [ IndentedString( IndentedString { parts: [ Raw( PartRaw { content: "For each user matching one of comma-separated\nglob patterns, enable TTY auditing\n", span: Span { start: Position { line: 243, column: 1, }, end: Position { line: 245, column: 11, }, }, }, ), ], span: Span { start: Position { line: 242, column: 35, }, end: Position { line: 245, column: 13, }, }, }, ), ], }, ), }, ), ], span: Span { start: Position { line: 239, column: 34, }, end: Position { line: 246, column: 10, }, }, }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "disablePattern", span: Span { start: Position { line: 248, column: 9, }, end: Position { line: 248, column: 23, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "mkOption", span: Span { start: Position { line: 248, column: 26, }, end: Position { line: 248, column: 34, }, }, }, ), arguments: [ Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "type", span: Span { start: Position { line: 249, column: 11, }, end: Position { line: 249, column: 15, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "types", span: Span { start: Position { line: 249, column: 18, }, end: Position { line: 249, column: 23, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "nullOr", span: Span { start: Position { line: 249, column: 24, }, end: Position { line: 249, column: 30, }, }, }, ), ], default: None, }, ), arguments: [ PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "types", span: Span { start: Position { line: 249, column: 31, }, end: Position { line: 249, column: 36, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "str", span: Span { start: Position { line: 249, column: 37, }, end: Position { line: 249, column: 40, }, }, }, ), ], default: None, }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "default", span: Span { start: Position { line: 250, column: 11, }, end: Position { line: 250, column: 18, }, }, }, ), ], to: Identifier( Identifier { id: "null", span: Span { start: Position { line: 250, column: 21, }, end: Position { line: 250, column: 25, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "description", span: Span { start: Position { line: 251, column: 11, }, end: Position { line: 251, column: 22, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "lib", span: Span { start: Position { line: 251, column: 25, }, end: Position { line: 251, column: 28, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "mdDoc", span: Span { start: Position { line: 251, column: 29, }, end: Position { line: 251, column: 34, }, }, }, ), ], default: None, }, ), arguments: [ IndentedString( IndentedString { parts: [ Raw( PartRaw { content: "For each user matching one of comma-separated\nglob patterns, disable TTY auditing\n", span: Span { start: Position { line: 252, column: 1, }, end: Position { line: 254, column: 11, }, }, }, ), ], span: Span { start: Position { line: 251, column: 35, }, end: Position { line: 254, column: 13, }, }, }, ), ], }, ), }, ), ], span: Span { start: Position { line: 248, column: 35, }, end: Position { line: 255, column: 10, }, }, }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "openOnly", span: Span { start: Position { line: 257, column: 9, }, end: Position { line: 257, column: 17, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "mkOption", span: Span { start: Position { line: 257, column: 20, }, end: Position { line: 257, column: 28, }, }, }, ), arguments: [ Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "type", span: Span { start: Position { line: 258, column: 11, }, end: Position { line: 258, column: 15, }, }, }, ), ], to: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "types", span: Span { start: Position { line: 258, column: 18, }, end: Position { line: 258, column: 23, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "bool", span: Span { start: Position { line: 258, column: 24, }, end: Position { line: 258, column: 28, }, }, }, ), ], default: None, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "default", span: Span { start: Position { line: 259, column: 11, }, end: Position { line: 259, column: 18, }, }, }, ), ], to: Identifier( Identifier { id: "false", span: Span { start: Position { line: 259, column: 21, }, end: Position { line: 259, column: 26, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "description", span: Span { start: Position { line: 260, column: 11, }, end: Position { line: 260, column: 22, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "lib", span: Span { start: Position { line: 260, column: 25, }, end: Position { line: 260, column: 28, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "mdDoc", span: Span { start: Position { line: 260, column: 29, }, end: Position { line: 260, column: 34, }, }, }, ), ], default: None, }, ), arguments: [ IndentedString( IndentedString { parts: [ Raw( PartRaw { content: "Set the TTY audit flag when opening the session,\nbut do not restore it when closing the session.\nUsing this option is necessary for some services\nthat don't fork() to run the authenticated session,\nsuch as sudo.\n", span: Span { start: Position { line: 261, column: 1, }, end: Position { line: 266, column: 11, }, }, }, ), ], span: Span { start: Position { line: 260, column: 35, }, end: Position { line: 266, column: 13, }, }, }, ), ], }, ), }, ), ], span: Span { start: Position { line: 257, column: 29, }, end: Position { line: 267, column: 10, }, }, }, ), ], }, ), }, ), ], span: Span { start: Position { line: 230, column: 18, }, end: Position { line: 268, column: 8, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "forwardXAuth", span: Span { start: Position { line: 270, column: 7, }, end: Position { line: 270, column: 19, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "mkOption", span: Span { start: Position { line: 270, column: 22, }, end: Position { line: 270, column: 30, }, }, }, ), arguments: [ Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "default", span: Span { start: Position { line: 271, column: 9, }, end: Position { line: 271, column: 16, }, }, }, ), ], to: Identifier( Identifier { id: "false", span: Span { start: Position { line: 271, column: 19, }, end: Position { line: 271, column: 24, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "type", span: Span { start: Position { line: 272, column: 9, }, end: Position { line: 272, column: 13, }, }, }, ), ], to: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "types", span: Span { start: Position { line: 272, column: 16, }, end: Position { line: 272, column: 21, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "bool", span: Span { start: Position { line: 272, column: 22, }, end: Position { line: 272, column: 26, }, }, }, ), ], default: None, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "description", span: Span { start: Position { line: 273, column: 9, }, end: Position { line: 273, column: 20, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "lib", span: Span { start: Position { line: 273, column: 23, }, end: Position { line: 273, column: 26, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "mdDoc", span: Span { start: Position { line: 273, column: 27, }, end: Position { line: 273, column: 32, }, }, }, ), ], default: None, }, ), arguments: [ IndentedString( IndentedString { parts: [ Raw( PartRaw { content: "Whether X authentication keys should be passed from the\ncalling user to the target user (e.g. for\n{command}`su`)\n", span: Span { start: Position { line: 274, column: 1, }, end: Position { line: 277, column: 9, }, }, }, ), ], span: Span { start: Position { line: 273, column: 33, }, end: Position { line: 277, column: 11, }, }, }, ), ], }, ), }, ), ], span: Span { start: Position { line: 270, column: 31, }, end: Position { line: 278, column: 8, }, }, }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "pamMount", span: Span { start: Position { line: 280, column: 7, }, end: Position { line: 280, column: 15, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "mkOption", span: Span { start: Position { line: 280, column: 18, }, end: Position { line: 280, column: 26, }, }, }, ), arguments: [ Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "default", span: Span { start: Position { line: 281, column: 9, }, end: Position { line: 281, column: 16, }, }, }, ), ], to: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "config", span: Span { start: Position { line: 281, column: 19, }, end: Position { line: 281, column: 25, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "security", span: Span { start: Position { line: 281, column: 26, }, end: Position { line: 281, column: 34, }, }, }, ), Raw( PartRaw { content: "pam", span: Span { start: Position { line: 281, column: 35, }, end: Position { line: 281, column: 38, }, }, }, ), Raw( PartRaw { content: "mount", span: Span { start: Position { line: 281, column: 39, }, end: Position { line: 281, column: 44, }, }, }, ), Raw( PartRaw { content: "enable", span: Span { start: Position { line: 281, column: 45, }, end: Position { line: 281, column: 51, }, }, }, ), ], default: None, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "defaultText", span: Span { start: Position { line: 282, column: 9, }, end: Position { line: 282, column: 20, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "literalExpression", span: Span { start: Position { line: 282, column: 23, }, end: Position { line: 282, column: 40, }, }, }, ), arguments: [ String( String_ { parts: [ Raw( PartRaw { content: "config.security.pam.mount.enable", span: Span { start: Position { line: 282, column: 42, }, end: Position { line: 282, column: 74, }, }, }, ), ], span: Span { start: Position { line: 282, column: 41, }, end: Position { line: 282, column: 75, }, }, }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "type", span: Span { start: Position { line: 283, column: 9, }, end: Position { line: 283, column: 13, }, }, }, ), ], to: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "types", span: Span { start: Position { line: 283, column: 16, }, end: Position { line: 283, column: 21, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "bool", span: Span { start: Position { line: 283, column: 22, }, end: Position { line: 283, column: 26, }, }, }, ), ], default: None, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "description", span: Span { start: Position { line: 284, column: 9, }, end: Position { line: 284, column: 20, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "lib", span: Span { start: Position { line: 284, column: 23, }, end: Position { line: 284, column: 26, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "mdDoc", span: Span { start: Position { line: 284, column: 27, }, end: Position { line: 284, column: 32, }, }, }, ), ], default: None, }, ), arguments: [ IndentedString( IndentedString { parts: [ Raw( PartRaw { content: "Enable PAM mount (pam_mount) system to mount fileystems on user login.\n", span: Span { start: Position { line: 285, column: 1, }, end: Position { line: 286, column: 9, }, }, }, ), ], span: Span { start: Position { line: 284, column: 33, }, end: Position { line: 286, column: 11, }, }, }, ), ], }, ), }, ), ], span: Span { start: Position { line: 280, column: 27, }, end: Position { line: 287, column: 8, }, }, }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "allowNullPassword", span: Span { start: Position { line: 289, column: 7, }, end: Position { line: 289, column: 24, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "mkOption", span: Span { start: Position { line: 289, column: 27, }, end: Position { line: 289, column: 35, }, }, }, ), arguments: [ Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "default", span: Span { start: Position { line: 290, column: 9, }, end: Position { line: 290, column: 16, }, }, }, ), ], to: Identifier( Identifier { id: "false", span: Span { start: Position { line: 290, column: 19, }, end: Position { line: 290, column: 24, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "type", span: Span { start: Position { line: 291, column: 9, }, end: Position { line: 291, column: 13, }, }, }, ), ], to: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "types", span: Span { start: Position { line: 291, column: 16, }, end: Position { line: 291, column: 21, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "bool", span: Span { start: Position { line: 291, column: 22, }, end: Position { line: 291, column: 26, }, }, }, ), ], default: None, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "description", span: Span { start: Position { line: 292, column: 9, }, end: Position { line: 292, column: 20, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "lib", span: Span { start: Position { line: 292, column: 23, }, end: Position { line: 292, column: 26, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "mdDoc", span: Span { start: Position { line: 292, column: 27, }, end: Position { line: 292, column: 32, }, }, }, ), ], default: None, }, ), arguments: [ IndentedString( IndentedString { parts: [ Raw( PartRaw { content: "Whether to allow logging into accounts that have no password\nset (i.e., have an empty password field in\n{file}`/etc/passwd` or\n{file}`/etc/group`). This does not enable\nlogging into disabled accounts (i.e., that have the password\nfield set to `!`). Note that regardless of\nwhat the pam_unix documentation says, accounts with hashed\nempty passwords are always allowed to log in.\n", span: Span { start: Position { line: 293, column: 1, }, end: Position { line: 301, column: 9, }, }, }, ), ], span: Span { start: Position { line: 292, column: 33, }, end: Position { line: 301, column: 11, }, }, }, ), ], }, ), }, ), ], span: Span { start: Position { line: 289, column: 36, }, end: Position { line: 302, column: 8, }, }, }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "nodelay", span: Span { start: Position { line: 304, column: 7, }, end: Position { line: 304, column: 14, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "mkOption", span: Span { start: Position { line: 304, column: 17, }, end: Position { line: 304, column: 25, }, }, }, ), arguments: [ Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "default", span: Span { start: Position { line: 305, column: 9, }, end: Position { line: 305, column: 16, }, }, }, ), ], to: Identifier( Identifier { id: "false", span: Span { start: Position { line: 305, column: 19, }, end: Position { line: 305, column: 24, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "type", span: Span { start: Position { line: 306, column: 9, }, end: Position { line: 306, column: 13, }, }, }, ), ], to: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "types", span: Span { start: Position { line: 306, column: 16, }, end: Position { line: 306, column: 21, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "bool", span: Span { start: Position { line: 306, column: 22, }, end: Position { line: 306, column: 26, }, }, }, ), ], default: None, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "description", span: Span { start: Position { line: 307, column: 9, }, end: Position { line: 307, column: 20, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "lib", span: Span { start: Position { line: 307, column: 23, }, end: Position { line: 307, column: 26, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "mdDoc", span: Span { start: Position { line: 307, column: 27, }, end: Position { line: 307, column: 32, }, }, }, ), ], default: None, }, ), arguments: [ IndentedString( IndentedString { parts: [ Raw( PartRaw { content: "Wheather the delay after typing a wrong password should be disabled.\n", span: Span { start: Position { line: 308, column: 1, }, end: Position { line: 309, column: 9, }, }, }, ), ], span: Span { start: Position { line: 307, column: 33, }, end: Position { line: 309, column: 11, }, }, }, ), ], }, ), }, ), ], span: Span { start: Position { line: 304, column: 26, }, end: Position { line: 310, column: 8, }, }, }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "requireWheel", span: Span { start: Position { line: 312, column: 7, }, end: Position { line: 312, column: 19, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "mkOption", span: Span { start: Position { line: 312, column: 22, }, end: Position { line: 312, column: 30, }, }, }, ), arguments: [ Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "default", span: Span { start: Position { line: 313, column: 9, }, end: Position { line: 313, column: 16, }, }, }, ), ], to: Identifier( Identifier { id: "false", span: Span { start: Position { line: 313, column: 19, }, end: Position { line: 313, column: 24, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "type", span: Span { start: Position { line: 314, column: 9, }, end: Position { line: 314, column: 13, }, }, }, ), ], to: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "types", span: Span { start: Position { line: 314, column: 16, }, end: Position { line: 314, column: 21, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "bool", span: Span { start: Position { line: 314, column: 22, }, end: Position { line: 314, column: 26, }, }, }, ), ], default: None, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "description", span: Span { start: Position { line: 315, column: 9, }, end: Position { line: 315, column: 20, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "lib", span: Span { start: Position { line: 315, column: 23, }, end: Position { line: 315, column: 26, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "mdDoc", span: Span { start: Position { line: 315, column: 27, }, end: Position { line: 315, column: 32, }, }, }, ), ], default: None, }, ), arguments: [ IndentedString( IndentedString { parts: [ Raw( PartRaw { content: "Whether to permit root access only to members of group wheel.\n", span: Span { start: Position { line: 316, column: 1, }, end: Position { line: 317, column: 9, }, }, }, ), ], span: Span { start: Position { line: 315, column: 33, }, end: Position { line: 317, column: 11, }, }, }, ), ], }, ), }, ), ], span: Span { start: Position { line: 312, column: 31, }, end: Position { line: 318, column: 8, }, }, }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "limits", span: Span { start: Position { line: 320, column: 7, }, end: Position { line: 320, column: 13, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "mkOption", span: Span { start: Position { line: 320, column: 16, }, end: Position { line: 320, column: 24, }, }, }, ), arguments: [ Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "default", span: Span { start: Position { line: 321, column: 9, }, end: Position { line: 321, column: 16, }, }, }, ), ], to: List( List { elements: [], span: Span { start: Position { line: 321, column: 19, }, end: Position { line: 321, column: 21, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "type", span: Span { start: Position { line: 322, column: 9, }, end: Position { line: 322, column: 13, }, }, }, ), ], to: Identifier( Identifier { id: "limitsType", span: Span { start: Position { line: 322, column: 16, }, end: Position { line: 322, column: 26, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "description", span: Span { start: Position { line: 323, column: 9, }, end: Position { line: 323, column: 20, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "lib", span: Span { start: Position { line: 323, column: 23, }, end: Position { line: 323, column: 26, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "mdDoc", span: Span { start: Position { line: 323, column: 27, }, end: Position { line: 323, column: 32, }, }, }, ), ], default: None, }, ), arguments: [ IndentedString( IndentedString { parts: [ Raw( PartRaw { content: "Attribute set describing resource limits. Defaults to the\nvalue of {option}`security.pam.loginLimits`.\nThe meaning of the values is explained in {manpage}`limits.conf(5)`.\n", span: Span { start: Position { line: 324, column: 1, }, end: Position { line: 327, column: 9, }, }, }, ), ], span: Span { start: Position { line: 323, column: 33, }, end: Position { line: 327, column: 11, }, }, }, ), ], }, ), }, ), ], span: Span { start: Position { line: 320, column: 25, }, end: Position { line: 328, column: 8, }, }, }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "showMotd", span: Span { start: Position { line: 330, column: 7, }, end: Position { line: 330, column: 15, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "mkOption", span: Span { start: Position { line: 330, column: 18, }, end: Position { line: 330, column: 26, }, }, }, ), arguments: [ Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "default", span: Span { start: Position { line: 331, column: 9, }, end: Position { line: 331, column: 16, }, }, }, ), ], to: Identifier( Identifier { id: "false", span: Span { start: Position { line: 331, column: 19, }, end: Position { line: 331, column: 24, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "type", span: Span { start: Position { line: 332, column: 9, }, end: Position { line: 332, column: 13, }, }, }, ), ], to: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "types", span: Span { start: Position { line: 332, column: 16, }, end: Position { line: 332, column: 21, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "bool", span: Span { start: Position { line: 332, column: 22, }, end: Position { line: 332, column: 26, }, }, }, ), ], default: None, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "description", span: Span { start: Position { line: 333, column: 9, }, end: Position { line: 333, column: 20, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "lib", span: Span { start: Position { line: 333, column: 23, }, end: Position { line: 333, column: 26, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "mdDoc", span: Span { start: Position { line: 333, column: 27, }, end: Position { line: 333, column: 32, }, }, }, ), ], default: None, }, ), arguments: [ String( String_ { parts: [ Raw( PartRaw { content: "Whether to show the message of the day.", span: Span { start: Position { line: 333, column: 34, }, end: Position { line: 333, column: 73, }, }, }, ), ], span: Span { start: Position { line: 333, column: 33, }, end: Position { line: 333, column: 74, }, }, }, ), ], }, ), }, ), ], span: Span { start: Position { line: 330, column: 27, }, end: Position { line: 334, column: 8, }, }, }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "makeHomeDir", span: Span { start: Position { line: 336, column: 7, }, end: Position { line: 336, column: 18, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "mkOption", span: Span { start: Position { line: 336, column: 21, }, end: Position { line: 336, column: 29, }, }, }, ), arguments: [ Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "default", span: Span { start: Position { line: 337, column: 9, }, end: Position { line: 337, column: 16, }, }, }, ), ], to: Identifier( Identifier { id: "false", span: Span { start: Position { line: 337, column: 19, }, end: Position { line: 337, column: 24, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "type", span: Span { start: Position { line: 338, column: 9, }, end: Position { line: 338, column: 13, }, }, }, ), ], to: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "types", span: Span { start: Position { line: 338, column: 16, }, end: Position { line: 338, column: 21, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "bool", span: Span { start: Position { line: 338, column: 22, }, end: Position { line: 338, column: 26, }, }, }, ), ], default: None, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "description", span: Span { start: Position { line: 339, column: 9, }, end: Position { line: 339, column: 20, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "lib", span: Span { start: Position { line: 339, column: 23, }, end: Position { line: 339, column: 26, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "mdDoc", span: Span { start: Position { line: 339, column: 27, }, end: Position { line: 339, column: 32, }, }, }, ), ], default: None, }, ), arguments: [ IndentedString( IndentedString { parts: [ Raw( PartRaw { content: "Whether to try to create home directories for users\nwith `$HOME`s pointing to nonexistent\nlocations on session login.\n", span: Span { start: Position { line: 340, column: 1, }, end: Position { line: 343, column: 9, }, }, }, ), ], span: Span { start: Position { line: 339, column: 33, }, end: Position { line: 343, column: 11, }, }, }, ), ], }, ), }, ), ], span: Span { start: Position { line: 336, column: 30, }, end: Position { line: 344, column: 8, }, }, }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "updateWtmp", span: Span { start: Position { line: 346, column: 7, }, end: Position { line: 346, column: 17, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "mkOption", span: Span { start: Position { line: 346, column: 20, }, end: Position { line: 346, column: 28, }, }, }, ), arguments: [ Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "default", span: Span { start: Position { line: 347, column: 9, }, end: Position { line: 347, column: 16, }, }, }, ), ], to: Identifier( Identifier { id: "false", span: Span { start: Position { line: 347, column: 19, }, end: Position { line: 347, column: 24, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "type", span: Span { start: Position { line: 348, column: 9, }, end: Position { line: 348, column: 13, }, }, }, ), ], to: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "types", span: Span { start: Position { line: 348, column: 16, }, end: Position { line: 348, column: 21, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "bool", span: Span { start: Position { line: 348, column: 22, }, end: Position { line: 348, column: 26, }, }, }, ), ], default: None, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "description", span: Span { start: Position { line: 349, column: 9, }, end: Position { line: 349, column: 20, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "lib", span: Span { start: Position { line: 349, column: 23, }, end: Position { line: 349, column: 26, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "mdDoc", span: Span { start: Position { line: 349, column: 27, }, end: Position { line: 349, column: 32, }, }, }, ), ], default: None, }, ), arguments: [ String( String_ { parts: [ Raw( PartRaw { content: "Whether to update {file}`/var/log/wtmp`.", span: Span { start: Position { line: 349, column: 34, }, end: Position { line: 349, column: 74, }, }, }, ), ], span: Span { start: Position { line: 349, column: 33, }, end: Position { line: 349, column: 75, }, }, }, ), ], }, ), }, ), ], span: Span { start: Position { line: 346, column: 29, }, end: Position { line: 350, column: 8, }, }, }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "logFailures", span: Span { start: Position { line: 352, column: 7, }, end: Position { line: 352, column: 18, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "mkOption", span: Span { start: Position { line: 352, column: 21, }, end: Position { line: 352, column: 29, }, }, }, ), arguments: [ Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "default", span: Span { start: Position { line: 353, column: 9, }, end: Position { line: 353, column: 16, }, }, }, ), ], to: Identifier( Identifier { id: "false", span: Span { start: Position { line: 353, column: 19, }, end: Position { line: 353, column: 24, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "type", span: Span { start: Position { line: 354, column: 9, }, end: Position { line: 354, column: 13, }, }, }, ), ], to: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "types", span: Span { start: Position { line: 354, column: 16, }, end: Position { line: 354, column: 21, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "bool", span: Span { start: Position { line: 354, column: 22, }, end: Position { line: 354, column: 26, }, }, }, ), ], default: None, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "description", span: Span { start: Position { line: 355, column: 9, }, end: Position { line: 355, column: 20, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "lib", span: Span { start: Position { line: 355, column: 23, }, end: Position { line: 355, column: 26, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "mdDoc", span: Span { start: Position { line: 355, column: 27, }, end: Position { line: 355, column: 32, }, }, }, ), ], default: None, }, ), arguments: [ String( String_ { parts: [ Raw( PartRaw { content: "Whether to log authentication failures in {file}`/var/log/faillog`.", span: Span { start: Position { line: 355, column: 34, }, end: Position { line: 355, column: 101, }, }, }, ), ], span: Span { start: Position { line: 355, column: 33, }, end: Position { line: 355, column: 102, }, }, }, ), ], }, ), }, ), ], span: Span { start: Position { line: 352, column: 30, }, end: Position { line: 356, column: 8, }, }, }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "enableAppArmor", span: Span { start: Position { line: 358, column: 7, }, end: Position { line: 358, column: 21, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "mkOption", span: Span { start: Position { line: 358, column: 24, }, end: Position { line: 358, column: 32, }, }, }, ), arguments: [ Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "default", span: Span { start: Position { line: 359, column: 9, }, end: Position { line: 359, column: 16, }, }, }, ), ], to: Identifier( Identifier { id: "false", span: Span { start: Position { line: 359, column: 19, }, end: Position { line: 359, column: 24, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "type", span: Span { start: Position { line: 360, column: 9, }, end: Position { line: 360, column: 13, }, }, }, ), ], to: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "types", span: Span { start: Position { line: 360, column: 16, }, end: Position { line: 360, column: 21, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "bool", span: Span { start: Position { line: 360, column: 22, }, end: Position { line: 360, column: 26, }, }, }, ), ], default: None, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "description", span: Span { start: Position { line: 361, column: 9, }, end: Position { line: 361, column: 20, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "lib", span: Span { start: Position { line: 361, column: 23, }, end: Position { line: 361, column: 26, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "mdDoc", span: Span { start: Position { line: 361, column: 27, }, end: Position { line: 361, column: 32, }, }, }, ), ], default: None, }, ), arguments: [ IndentedString( IndentedString { parts: [ Raw( PartRaw { content: "Enable support for attaching AppArmor profiles at the\nuser/group level, e.g., as part of a role based access\ncontrol scheme.\n", span: Span { start: Position { line: 362, column: 1, }, end: Position { line: 365, column: 9, }, }, }, ), ], span: Span { start: Position { line: 361, column: 33, }, end: Position { line: 365, column: 11, }, }, }, ), ], }, ), }, ), ], span: Span { start: Position { line: 358, column: 33, }, end: Position { line: 366, column: 8, }, }, }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "enableKwallet", span: Span { start: Position { line: 368, column: 7, }, end: Position { line: 368, column: 20, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "mkOption", span: Span { start: Position { line: 368, column: 23, }, end: Position { line: 368, column: 31, }, }, }, ), arguments: [ Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "default", span: Span { start: Position { line: 369, column: 9, }, end: Position { line: 369, column: 16, }, }, }, ), ], to: Identifier( Identifier { id: "false", span: Span { start: Position { line: 369, column: 19, }, end: Position { line: 369, column: 24, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "type", span: Span { start: Position { line: 370, column: 9, }, end: Position { line: 370, column: 13, }, }, }, ), ], to: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "types", span: Span { start: Position { line: 370, column: 16, }, end: Position { line: 370, column: 21, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "bool", span: Span { start: Position { line: 370, column: 22, }, end: Position { line: 370, column: 26, }, }, }, ), ], default: None, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "description", span: Span { start: Position { line: 371, column: 9, }, end: Position { line: 371, column: 20, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "lib", span: Span { start: Position { line: 371, column: 23, }, end: Position { line: 371, column: 26, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "mdDoc", span: Span { start: Position { line: 371, column: 27, }, end: Position { line: 371, column: 32, }, }, }, ), ], default: None, }, ), arguments: [ IndentedString( IndentedString { parts: [ Raw( PartRaw { content: "If enabled, pam_wallet will attempt to automatically unlock the\nuser's default KDE wallet upon login. If the user has no wallet named\n\"kdewallet\", or the login password does not match their wallet\npassword, KDE will prompt separately after login.\n", span: Span { start: Position { line: 372, column: 1, }, end: Position { line: 376, column: 9, }, }, }, ), ], span: Span { start: Position { line: 371, column: 33, }, end: Position { line: 376, column: 11, }, }, }, ), ], }, ), }, ), ], span: Span { start: Position { line: 368, column: 32, }, end: Position { line: 377, column: 8, }, }, }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "sssdStrictAccess", span: Span { start: Position { line: 378, column: 7, }, end: Position { line: 378, column: 23, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "mkOption", span: Span { start: Position { line: 378, column: 26, }, end: Position { line: 378, column: 34, }, }, }, ), arguments: [ Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "default", span: Span { start: Position { line: 379, column: 9, }, end: Position { line: 379, column: 16, }, }, }, ), ], to: Identifier( Identifier { id: "false", span: Span { start: Position { line: 379, column: 19, }, end: Position { line: 379, column: 24, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "type", span: Span { start: Position { line: 380, column: 9, }, end: Position { line: 380, column: 13, }, }, }, ), ], to: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "types", span: Span { start: Position { line: 380, column: 16, }, end: Position { line: 380, column: 21, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "bool", span: Span { start: Position { line: 380, column: 22, }, end: Position { line: 380, column: 26, }, }, }, ), ], default: None, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "description", span: Span { start: Position { line: 381, column: 9, }, end: Position { line: 381, column: 20, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "lib", span: Span { start: Position { line: 381, column: 23, }, end: Position { line: 381, column: 26, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "mdDoc", span: Span { start: Position { line: 381, column: 27, }, end: Position { line: 381, column: 32, }, }, }, ), ], default: None, }, ), arguments: [ String( String_ { parts: [ Raw( PartRaw { content: "enforce sssd access control", span: Span { start: Position { line: 381, column: 34, }, end: Position { line: 381, column: 61, }, }, }, ), ], span: Span { start: Position { line: 381, column: 33, }, end: Position { line: 381, column: 62, }, }, }, ), ], }, ), }, ), ], span: Span { start: Position { line: 378, column: 35, }, end: Position { line: 382, column: 8, }, }, }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "enableGnomeKeyring", span: Span { start: Position { line: 384, column: 7, }, end: Position { line: 384, column: 25, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "mkOption", span: Span { start: Position { line: 384, column: 28, }, end: Position { line: 384, column: 36, }, }, }, ), arguments: [ Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "default", span: Span { start: Position { line: 385, column: 9, }, end: Position { line: 385, column: 16, }, }, }, ), ], to: Identifier( Identifier { id: "false", span: Span { start: Position { line: 385, column: 19, }, end: Position { line: 385, column: 24, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "type", span: Span { start: Position { line: 386, column: 9, }, end: Position { line: 386, column: 13, }, }, }, ), ], to: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "types", span: Span { start: Position { line: 386, column: 16, }, end: Position { line: 386, column: 21, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "bool", span: Span { start: Position { line: 386, column: 22, }, end: Position { line: 386, column: 26, }, }, }, ), ], default: None, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "description", span: Span { start: Position { line: 387, column: 9, }, end: Position { line: 387, column: 20, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "lib", span: Span { start: Position { line: 387, column: 23, }, end: Position { line: 387, column: 26, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "mdDoc", span: Span { start: Position { line: 387, column: 27, }, end: Position { line: 387, column: 32, }, }, }, ), ], default: None, }, ), arguments: [ IndentedString( IndentedString { parts: [ Raw( PartRaw { content: "If enabled, pam_gnome_keyring will attempt to automatically unlock the\nuser's default Gnome keyring upon login. If the user login password does\nnot match their keyring password, Gnome Keyring will prompt separately\nafter login.\n", span: Span { start: Position { line: 388, column: 1, }, end: Position { line: 392, column: 9, }, }, }, ), ], span: Span { start: Position { line: 387, column: 33, }, end: Position { line: 392, column: 11, }, }, }, ), ], }, ), }, ), ], span: Span { start: Position { line: 384, column: 37, }, end: Position { line: 393, column: 8, }, }, }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "gnupg", span: Span { start: Position { line: 395, column: 7, }, end: Position { line: 395, column: 12, }, }, }, ), ], to: Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "enable", span: Span { start: Position { line: 396, column: 9, }, end: Position { line: 396, column: 15, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "mkOption", span: Span { start: Position { line: 396, column: 18, }, end: Position { line: 396, column: 26, }, }, }, ), arguments: [ Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "type", span: Span { start: Position { line: 397, column: 11, }, end: Position { line: 397, column: 15, }, }, }, ), ], to: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "types", span: Span { start: Position { line: 397, column: 18, }, end: Position { line: 397, column: 23, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "bool", span: Span { start: Position { line: 397, column: 24, }, end: Position { line: 397, column: 28, }, }, }, ), ], default: None, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "default", span: Span { start: Position { line: 398, column: 11, }, end: Position { line: 398, column: 18, }, }, }, ), ], to: Identifier( Identifier { id: "false", span: Span { start: Position { line: 398, column: 21, }, end: Position { line: 398, column: 26, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "description", span: Span { start: Position { line: 399, column: 11, }, end: Position { line: 399, column: 22, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "lib", span: Span { start: Position { line: 399, column: 25, }, end: Position { line: 399, column: 28, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "mdDoc", span: Span { start: Position { line: 399, column: 29, }, end: Position { line: 399, column: 34, }, }, }, ), ], default: None, }, ), arguments: [ IndentedString( IndentedString { parts: [ Raw( PartRaw { content: "If enabled, pam_gnupg will attempt to automatically unlock the\nuser's GPG keys with the login password via\n{command}`gpg-agent`. The keygrips of all keys to be\nunlocked should be written to {file}`~/.pam-gnupg`,\nand can be queried with {command}`gpg -K --with-keygrip`.\nPresetting passphrases must be enabled by adding\n`allow-preset-passphrase` in\n{file}`~/.gnupg/gpg-agent.conf`.\n", span: Span { start: Position { line: 400, column: 1, }, end: Position { line: 408, column: 11, }, }, }, ), ], span: Span { start: Position { line: 399, column: 35, }, end: Position { line: 408, column: 13, }, }, }, ), ], }, ), }, ), ], span: Span { start: Position { line: 396, column: 27, }, end: Position { line: 409, column: 10, }, }, }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "noAutostart", span: Span { start: Position { line: 411, column: 9, }, end: Position { line: 411, column: 20, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "mkOption", span: Span { start: Position { line: 411, column: 23, }, end: Position { line: 411, column: 31, }, }, }, ), arguments: [ Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "type", span: Span { start: Position { line: 412, column: 11, }, end: Position { line: 412, column: 15, }, }, }, ), ], to: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "types", span: Span { start: Position { line: 412, column: 18, }, end: Position { line: 412, column: 23, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "bool", span: Span { start: Position { line: 412, column: 24, }, end: Position { line: 412, column: 28, }, }, }, ), ], default: None, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "default", span: Span { start: Position { line: 413, column: 11, }, end: Position { line: 413, column: 18, }, }, }, ), ], to: Identifier( Identifier { id: "false", span: Span { start: Position { line: 413, column: 21, }, end: Position { line: 413, column: 26, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "description", span: Span { start: Position { line: 414, column: 11, }, end: Position { line: 414, column: 22, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "lib", span: Span { start: Position { line: 414, column: 25, }, end: Position { line: 414, column: 28, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "mdDoc", span: Span { start: Position { line: 414, column: 29, }, end: Position { line: 414, column: 34, }, }, }, ), ], default: None, }, ), arguments: [ IndentedString( IndentedString { parts: [ Raw( PartRaw { content: "Don't start {command}`gpg-agent` if it is not running.\nUseful in conjunction with starting {command}`gpg-agent` as\na systemd user service.\n", span: Span { start: Position { line: 415, column: 1, }, end: Position { line: 418, column: 11, }, }, }, ), ], span: Span { start: Position { line: 414, column: 35, }, end: Position { line: 418, column: 13, }, }, }, ), ], }, ), }, ), ], span: Span { start: Position { line: 411, column: 32, }, end: Position { line: 419, column: 10, }, }, }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "storeOnly", span: Span { start: Position { line: 421, column: 9, }, end: Position { line: 421, column: 18, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "mkOption", span: Span { start: Position { line: 421, column: 21, }, end: Position { line: 421, column: 29, }, }, }, ), arguments: [ Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "type", span: Span { start: Position { line: 422, column: 11, }, end: Position { line: 422, column: 15, }, }, }, ), ], to: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "types", span: Span { start: Position { line: 422, column: 18, }, end: Position { line: 422, column: 23, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "bool", span: Span { start: Position { line: 422, column: 24, }, end: Position { line: 422, column: 28, }, }, }, ), ], default: None, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "default", span: Span { start: Position { line: 423, column: 11, }, end: Position { line: 423, column: 18, }, }, }, ), ], to: Identifier( Identifier { id: "false", span: Span { start: Position { line: 423, column: 21, }, end: Position { line: 423, column: 26, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "description", span: Span { start: Position { line: 424, column: 11, }, end: Position { line: 424, column: 22, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "lib", span: Span { start: Position { line: 424, column: 25, }, end: Position { line: 424, column: 28, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "mdDoc", span: Span { start: Position { line: 424, column: 29, }, end: Position { line: 424, column: 34, }, }, }, ), ], default: None, }, ), arguments: [ IndentedString( IndentedString { parts: [ Raw( PartRaw { content: "Don't send the password immediately after login, but store for PAM\n`session`.\n", span: Span { start: Position { line: 425, column: 1, }, end: Position { line: 427, column: 11, }, }, }, ), ], span: Span { start: Position { line: 424, column: 35, }, end: Position { line: 427, column: 13, }, }, }, ), ], }, ), }, ), ], span: Span { start: Position { line: 421, column: 30, }, end: Position { line: 428, column: 10, }, }, }, ), ], }, ), }, ), ], span: Span { start: Position { line: 395, column: 15, }, end: Position { line: 429, column: 8, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "text", span: Span { start: Position { line: 431, column: 7, }, end: Position { line: 431, column: 11, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "mkOption", span: Span { start: Position { line: 431, column: 14, }, end: Position { line: 431, column: 22, }, }, }, ), arguments: [ Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "type", span: Span { start: Position { line: 432, column: 9, }, end: Position { line: 432, column: 13, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "types", span: Span { start: Position { line: 432, column: 16, }, end: Position { line: 432, column: 21, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "nullOr", span: Span { start: Position { line: 432, column: 22, }, end: Position { line: 432, column: 28, }, }, }, ), ], default: None, }, ), arguments: [ PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "types", span: Span { start: Position { line: 432, column: 29, }, end: Position { line: 432, column: 34, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "lines", span: Span { start: Position { line: 432, column: 35, }, end: Position { line: 432, column: 40, }, }, }, ), ], default: None, }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "description", span: Span { start: Position { line: 433, column: 9, }, end: Position { line: 433, column: 20, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "lib", span: Span { start: Position { line: 433, column: 23, }, end: Position { line: 433, column: 26, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "mdDoc", span: Span { start: Position { line: 433, column: 27, }, end: Position { line: 433, column: 32, }, }, }, ), ], default: None, }, ), arguments: [ String( String_ { parts: [ Raw( PartRaw { content: "Contents of the PAM service file.", span: Span { start: Position { line: 433, column: 34, }, end: Position { line: 433, column: 67, }, }, }, ), ], span: Span { start: Position { line: 433, column: 33, }, end: Position { line: 433, column: 68, }, }, }, ), ], }, ), }, ), ], span: Span { start: Position { line: 431, column: 23, }, end: Position { line: 434, column: 8, }, }, }, ), ], }, ), }, ), ], span: Span { start: Position { line: 13, column: 15, }, end: Position { line: 436, column: 6, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "config", span: Span { start: Position { line: 441, column: 5, }, end: Position { line: 441, column: 11, }, }, }, ), ], to: Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "name", span: Span { start: Position { line: 442, column: 7, }, end: Position { line: 442, column: 11, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "mkDefault", span: Span { start: Position { line: 442, column: 14, }, end: Position { line: 442, column: 23, }, }, }, ), arguments: [ Identifier( Identifier { id: "name", span: Span { start: Position { line: 442, column: 24, }, end: Position { line: 442, column: 28, }, }, }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "setLoginUid", span: Span { start: Position { line: 443, column: 7, }, end: Position { line: 443, column: 18, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "mkDefault", span: Span { start: Position { line: 443, column: 21, }, end: Position { line: 443, column: 30, }, }, }, ), arguments: [ PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "cfg", span: Span { start: Position { line: 443, column: 31, }, end: Position { line: 443, column: 34, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "startSession", span: Span { start: Position { line: 443, column: 35, }, end: Position { line: 443, column: 47, }, }, }, ), ], default: None, }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "limits", span: Span { start: Position { line: 444, column: 7, }, end: Position { line: 444, column: 13, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "mkDefault", span: Span { start: Position { line: 444, column: 16, }, end: Position { line: 444, column: 25, }, }, }, ), arguments: [ PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "config", span: Span { start: Position { line: 444, column: 26, }, end: Position { line: 444, column: 32, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "security", span: Span { start: Position { line: 444, column: 33, }, end: Position { line: 444, column: 41, }, }, }, ), Raw( PartRaw { content: "pam", span: Span { start: Position { line: 444, column: 42, }, end: Position { line: 444, column: 45, }, }, }, ), Raw( PartRaw { content: "loginLimits", span: Span { start: Position { line: 444, column: 46, }, end: Position { line: 444, column: 57, }, }, }, ), ], default: None, }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "text", span: Span { start: Position { line: 449, column: 7, }, end: Position { line: 449, column: 11, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "mkDefault", span: Span { start: Position { line: 449, column: 14, }, end: Position { line: 449, column: 23, }, }, }, ), arguments: [ BinaryOperation( BinaryOperation { left: BinaryOperation( BinaryOperation { left: BinaryOperation( BinaryOperation { left: BinaryOperation( BinaryOperation { left: BinaryOperation( BinaryOperation { left: BinaryOperation( BinaryOperation { left: BinaryOperation( BinaryOperation { left: BinaryOperation( BinaryOperation { left: BinaryOperation( BinaryOperation { left: BinaryOperation( BinaryOperation { left: BinaryOperation( BinaryOperation { left: BinaryOperation( BinaryOperation { left: BinaryOperation( BinaryOperation { left: BinaryOperation( BinaryOperation { left: BinaryOperation( BinaryOperation { left: BinaryOperation( BinaryOperation { left: BinaryOperation( BinaryOperation { left: BinaryOperation( BinaryOperation { left: BinaryOperation( BinaryOperation { left: BinaryOperation( BinaryOperation { left: BinaryOperation( BinaryOperation { left: BinaryOperation( BinaryOperation { left: BinaryOperation( BinaryOperation { left: BinaryOperation( BinaryOperation { left: BinaryOperation( BinaryOperation { left: BinaryOperation( BinaryOperation { left: BinaryOperation( BinaryOperation { left: BinaryOperation( BinaryOperation { left: BinaryOperation( BinaryOperation { left: BinaryOperation( BinaryOperation { left: BinaryOperation( BinaryOperation { left: BinaryOperation( BinaryOperation { left: BinaryOperation( BinaryOperation { left: BinaryOperation( BinaryOperation { left: BinaryOperation( BinaryOperation { left: BinaryOperation( BinaryOperation { left: BinaryOperation( BinaryOperation { left: BinaryOperation( BinaryOperation { left: BinaryOperation( BinaryOperation { left: BinaryOperation( BinaryOperation { left: BinaryOperation( BinaryOperation { left: BinaryOperation( BinaryOperation { left: BinaryOperation( BinaryOperation { left: BinaryOperation( BinaryOperation { left: BinaryOperation( BinaryOperation { left: BinaryOperation( BinaryOperation { left: BinaryOperation( BinaryOperation { left: BinaryOperation( BinaryOperation { left: BinaryOperation( BinaryOperation { left: BinaryOperation( BinaryOperation { left: BinaryOperation( BinaryOperation { left: BinaryOperation( BinaryOperation { left: BinaryOperation( BinaryOperation { left: BinaryOperation( BinaryOperation { left: BinaryOperation( BinaryOperation { left: BinaryOperation( BinaryOperation { left: BinaryOperation( BinaryOperation { left: IndentedString( IndentedString { parts: [ Raw( PartRaw { content: "# Account management.\n", span: Span { start: Position { line: 452, column: 1, }, end: Position { line: 453, column: 11, }, }, }, ), ], span: Span { start: Position { line: 451, column: 11, }, end: Position { line: 453, column: 13, }, }, }, ), operator: Addition, right: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "optionalString", span: Span { start: Position { line: 454, column: 11, }, end: Position { line: 454, column: 25, }, }, }, ), arguments: [ Identifier( Identifier { id: "use_ldap", span: Span { start: Position { line: 454, column: 26, }, end: Position { line: 454, column: 34, }, }, }, ), IndentedString( IndentedString { parts: [ Raw( PartRaw { content: "account sufficient ", span: Span { start: Position { line: 455, column: 1, }, end: Position { line: 455, column: 32, }, }, }, ), Interpolation( PartInterpolation { expression: Identifier( Identifier { id: "pam_ldap", span: Span { start: Position { line: 455, column: 34, }, end: Position { line: 455, column: 42, }, }, }, ), }, ), Raw( PartRaw { content: "/lib/security/pam_ldap.so\n", span: Span { start: Position { line: 455, column: 1, }, end: Position { line: 456, column: 11, }, }, }, ), ], span: Span { start: Position { line: 454, column: 35, }, end: Position { line: 456, column: 13, }, }, }, ), ], }, ), }, ), operator: Addition, right: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "optionalString", span: Span { start: Position { line: 457, column: 11, }, end: Position { line: 457, column: 25, }, }, }, ), arguments: [ PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "cfg", span: Span { start: Position { line: 457, column: 26, }, end: Position { line: 457, column: 29, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "mysqlAuth", span: Span { start: Position { line: 457, column: 30, }, end: Position { line: 457, column: 39, }, }, }, ), ], default: None, }, ), IndentedString( IndentedString { parts: [ Raw( PartRaw { content: "account sufficient ", span: Span { start: Position { line: 458, column: 1, }, end: Position { line: 458, column: 32, }, }, }, ), Interpolation( PartInterpolation { expression: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "pkgs", span: Span { start: Position { line: 458, column: 34, }, end: Position { line: 458, column: 38, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "pam_mysql", span: Span { start: Position { line: 458, column: 39, }, end: Position { line: 458, column: 48, }, }, }, ), ], default: None, }, ), }, ), Raw( PartRaw { content: "/lib/security/pam_mysql.so config_file=/etc/security/pam_mysql.conf\n", span: Span { start: Position { line: 458, column: 1, }, end: Position { line: 459, column: 11, }, }, }, ), ], span: Span { start: Position { line: 457, column: 40, }, end: Position { line: 459, column: 13, }, }, }, ), ], }, ), }, ), operator: Addition, right: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "optionalString", span: Span { start: Position { line: 460, column: 11, }, end: Position { line: 460, column: 25, }, }, }, ), arguments: [ BinaryOperation( BinaryOperation { left: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "config", span: Span { start: Position { line: 460, column: 27, }, end: Position { line: 460, column: 33, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "services", span: Span { start: Position { line: 460, column: 34, }, end: Position { line: 460, column: 42, }, }, }, ), Raw( PartRaw { content: "sssd", span: Span { start: Position { line: 460, column: 43, }, end: Position { line: 460, column: 47, }, }, }, ), Raw( PartRaw { content: "enable", span: Span { start: Position { line: 460, column: 48, }, end: Position { line: 460, column: 54, }, }, }, ), ], default: None, }, ), operator: LogicalAnd, right: BinaryOperation( BinaryOperation { left: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "cfg", span: Span { start: Position { line: 460, column: 58, }, end: Position { line: 460, column: 61, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "sssdStrictAccess", span: Span { start: Position { line: 460, column: 62, }, end: Position { line: 460, column: 78, }, }, }, ), ], default: None, }, ), operator: EqualTo, right: Identifier( Identifier { id: "false", span: Span { start: Position { line: 460, column: 80, }, end: Position { line: 460, column: 85, }, }, }, ), }, ), }, ), IndentedString( IndentedString { parts: [ Raw( PartRaw { content: "account sufficient ", span: Span { start: Position { line: 461, column: 1, }, end: Position { line: 461, column: 32, }, }, }, ), Interpolation( PartInterpolation { expression: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "pkgs", span: Span { start: Position { line: 461, column: 34, }, end: Position { line: 461, column: 38, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "sssd", span: Span { start: Position { line: 461, column: 39, }, end: Position { line: 461, column: 43, }, }, }, ), ], default: None, }, ), }, ), Raw( PartRaw { content: "/lib/security/pam_sss.so\n", span: Span { start: Position { line: 461, column: 1, }, end: Position { line: 462, column: 11, }, }, }, ), ], span: Span { start: Position { line: 460, column: 87, }, end: Position { line: 462, column: 13, }, }, }, ), ], }, ), }, ), operator: Addition, right: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "optionalString", span: Span { start: Position { line: 463, column: 11, }, end: Position { line: 463, column: 25, }, }, }, ), arguments: [ BinaryOperation( BinaryOperation { left: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "config", span: Span { start: Position { line: 463, column: 27, }, end: Position { line: 463, column: 33, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "services", span: Span { start: Position { line: 463, column: 34, }, end: Position { line: 463, column: 42, }, }, }, ), Raw( PartRaw { content: "sssd", span: Span { start: Position { line: 463, column: 43, }, end: Position { line: 463, column: 47, }, }, }, ), Raw( PartRaw { content: "enable", span: Span { start: Position { line: 463, column: 48, }, end: Position { line: 463, column: 54, }, }, }, ), ], default: None, }, ), operator: LogicalAnd, right: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "cfg", span: Span { start: Position { line: 463, column: 58, }, end: Position { line: 463, column: 61, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "sssdStrictAccess", span: Span { start: Position { line: 463, column: 62, }, end: Position { line: 463, column: 78, }, }, }, ), ], default: None, }, ), }, ), IndentedString( IndentedString { parts: [ Raw( PartRaw { content: "account [default=bad success=ok user_unknown=ignore] ", span: Span { start: Position { line: 464, column: 1, }, end: Position { line: 464, column: 66, }, }, }, ), Interpolation( PartInterpolation { expression: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "pkgs", span: Span { start: Position { line: 464, column: 68, }, end: Position { line: 464, column: 72, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "sssd", span: Span { start: Position { line: 464, column: 73, }, end: Position { line: 464, column: 77, }, }, }, ), ], default: None, }, ), }, ), Raw( PartRaw { content: "/lib/security/pam_sss.so\n", span: Span { start: Position { line: 464, column: 1, }, end: Position { line: 465, column: 11, }, }, }, ), ], span: Span { start: Position { line: 463, column: 80, }, end: Position { line: 465, column: 13, }, }, }, ), ], }, ), }, ), operator: Addition, right: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "optionalString", span: Span { start: Position { line: 466, column: 11, }, end: Position { line: 466, column: 25, }, }, }, ), arguments: [ PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "config", span: Span { start: Position { line: 466, column: 26, }, end: Position { line: 466, column: 32, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "security", span: Span { start: Position { line: 466, column: 33, }, end: Position { line: 466, column: 41, }, }, }, ), Raw( PartRaw { content: "pam", span: Span { start: Position { line: 466, column: 42, }, end: Position { line: 466, column: 45, }, }, }, ), Raw( PartRaw { content: "krb5", span: Span { start: Position { line: 466, column: 46, }, end: Position { line: 466, column: 50, }, }, }, ), Raw( PartRaw { content: "enable", span: Span { start: Position { line: 466, column: 51, }, end: Position { line: 466, column: 57, }, }, }, ), ], default: None, }, ), IndentedString( IndentedString { parts: [ Raw( PartRaw { content: "account sufficient ", span: Span { start: Position { line: 467, column: 1, }, end: Position { line: 467, column: 32, }, }, }, ), Interpolation( PartInterpolation { expression: Identifier( Identifier { id: "pam_krb5", span: Span { start: Position { line: 467, column: 34, }, end: Position { line: 467, column: 42, }, }, }, ), }, ), Raw( PartRaw { content: "/lib/security/pam_krb5.so\n", span: Span { start: Position { line: 467, column: 1, }, end: Position { line: 468, column: 11, }, }, }, ), ], span: Span { start: Position { line: 466, column: 58, }, end: Position { line: 468, column: 13, }, }, }, ), ], }, ), }, ), operator: Addition, right: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "optionalString", span: Span { start: Position { line: 469, column: 11, }, end: Position { line: 469, column: 25, }, }, }, ), arguments: [ PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "cfg", span: Span { start: Position { line: 469, column: 26, }, end: Position { line: 469, column: 29, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "googleOsLoginAccountVerification", span: Span { start: Position { line: 469, column: 30, }, end: Position { line: 469, column: 62, }, }, }, ), ], default: None, }, ), IndentedString( IndentedString { parts: [ Raw( PartRaw { content: "account [success=ok ignore=ignore default=die] ", span: Span { start: Position { line: 470, column: 1, }, end: Position { line: 470, column: 60, }, }, }, ), Interpolation( PartInterpolation { expression: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "pkgs", span: Span { start: Position { line: 470, column: 62, }, end: Position { line: 470, column: 66, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "google-guest-oslogin", span: Span { start: Position { line: 470, column: 67, }, end: Position { line: 470, column: 87, }, }, }, ), ], default: None, }, ), }, ), Raw( PartRaw { content: "/lib/security/pam_oslogin_login.so\naccount [success=ok default=ignore] ", span: Span { start: Position { line: 470, column: 1, }, end: Position { line: 471, column: 49, }, }, }, ), Interpolation( PartInterpolation { expression: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "pkgs", span: Span { start: Position { line: 471, column: 51, }, end: Position { line: 471, column: 55, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "google-guest-oslogin", span: Span { start: Position { line: 471, column: 56, }, end: Position { line: 471, column: 76, }, }, }, ), ], default: None, }, ), }, ), Raw( PartRaw { content: "/lib/security/pam_oslogin_admin.so\n", span: Span { start: Position { line: 470, column: 1, }, end: Position { line: 472, column: 11, }, }, }, ), ], span: Span { start: Position { line: 469, column: 63, }, end: Position { line: 472, column: 13, }, }, }, ), ], }, ), }, ), operator: Addition, right: IndentedString( IndentedString { parts: [ Raw( PartRaw { content: "account required pam_unix.so\n\n# Authentication management.\n", span: Span { start: Position { line: 477, column: 1, }, end: Position { line: 480, column: 11, }, }, }, ), ], span: Span { start: Position { line: 476, column: 11, }, end: Position { line: 480, column: 13, }, }, }, ), }, ), operator: Addition, right: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "optionalString", span: Span { start: Position { line: 481, column: 11, }, end: Position { line: 481, column: 25, }, }, }, ), arguments: [ PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "cfg", span: Span { start: Position { line: 481, column: 26, }, end: Position { line: 481, column: 29, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "googleOsLoginAuthentication", span: Span { start: Position { line: 481, column: 30, }, end: Position { line: 481, column: 57, }, }, }, ), ], default: None, }, ), IndentedString( IndentedString { parts: [ Raw( PartRaw { content: "auth [success=done perm_denied=die default=ignore] ", span: Span { start: Position { line: 482, column: 1, }, end: Position { line: 482, column: 64, }, }, }, ), Interpolation( PartInterpolation { expression: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "pkgs", span: Span { start: Position { line: 482, column: 66, }, end: Position { line: 482, column: 70, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "google-guest-oslogin", span: Span { start: Position { line: 482, column: 71, }, end: Position { line: 482, column: 91, }, }, }, ), ], default: None, }, ), }, ), Raw( PartRaw { content: "/lib/security/pam_oslogin_login.so\n", span: Span { start: Position { line: 482, column: 1, }, end: Position { line: 483, column: 11, }, }, }, ), ], span: Span { start: Position { line: 481, column: 58, }, end: Position { line: 483, column: 13, }, }, }, ), ], }, ), }, ), operator: Addition, right: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "optionalString", span: Span { start: Position { line: 484, column: 11, }, end: Position { line: 484, column: 25, }, }, }, ), arguments: [ PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "cfg", span: Span { start: Position { line: 484, column: 26, }, end: Position { line: 484, column: 29, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "rootOK", span: Span { start: Position { line: 484, column: 30, }, end: Position { line: 484, column: 36, }, }, }, ), ], default: None, }, ), IndentedString( IndentedString { parts: [ Raw( PartRaw { content: "auth sufficient pam_rootok.so\n", span: Span { start: Position { line: 485, column: 1, }, end: Position { line: 486, column: 11, }, }, }, ), ], span: Span { start: Position { line: 484, column: 37, }, end: Position { line: 486, column: 13, }, }, }, ), ], }, ), }, ), operator: Addition, right: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "optionalString", span: Span { start: Position { line: 487, column: 11, }, end: Position { line: 487, column: 25, }, }, }, ), arguments: [ PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "cfg", span: Span { start: Position { line: 487, column: 26, }, end: Position { line: 487, column: 29, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "requireWheel", span: Span { start: Position { line: 487, column: 30, }, end: Position { line: 487, column: 42, }, }, }, ), ], default: None, }, ), IndentedString( IndentedString { parts: [ Raw( PartRaw { content: "auth required pam_wheel.so use_uid\n", span: Span { start: Position { line: 488, column: 1, }, end: Position { line: 489, column: 11, }, }, }, ), ], span: Span { start: Position { line: 487, column: 43, }, end: Position { line: 489, column: 13, }, }, }, ), ], }, ), }, ), operator: Addition, right: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "optionalString", span: Span { start: Position { line: 490, column: 11, }, end: Position { line: 490, column: 25, }, }, }, ), arguments: [ PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "cfg", span: Span { start: Position { line: 490, column: 26, }, end: Position { line: 490, column: 29, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "logFailures", span: Span { start: Position { line: 490, column: 30, }, end: Position { line: 490, column: 41, }, }, }, ), ], default: None, }, ), IndentedString( IndentedString { parts: [ Raw( PartRaw { content: "auth required pam_faillock.so\n", span: Span { start: Position { line: 491, column: 1, }, end: Position { line: 492, column: 11, }, }, }, ), ], span: Span { start: Position { line: 490, column: 42, }, end: Position { line: 492, column: 13, }, }, }, ), ], }, ), }, ), operator: Addition, right: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "optionalString", span: Span { start: Position { line: 493, column: 11, }, end: Position { line: 493, column: 25, }, }, }, ), arguments: [ PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "cfg", span: Span { start: Position { line: 493, column: 26, }, end: Position { line: 493, column: 29, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "mysqlAuth", span: Span { start: Position { line: 493, column: 30, }, end: Position { line: 493, column: 39, }, }, }, ), ], default: None, }, ), IndentedString( IndentedString { parts: [ Raw( PartRaw { content: "auth sufficient ", span: Span { start: Position { line: 494, column: 1, }, end: Position { line: 494, column: 29, }, }, }, ), Interpolation( PartInterpolation { expression: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "pkgs", span: Span { start: Position { line: 494, column: 31, }, end: Position { line: 494, column: 35, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "pam_mysql", span: Span { start: Position { line: 494, column: 36, }, end: Position { line: 494, column: 45, }, }, }, ), ], default: None, }, ), }, ), Raw( PartRaw { content: "/lib/security/pam_mysql.so config_file=/etc/security/pam_mysql.conf\n", span: Span { start: Position { line: 494, column: 1, }, end: Position { line: 495, column: 11, }, }, }, ), ], span: Span { start: Position { line: 493, column: 40, }, end: Position { line: 495, column: 13, }, }, }, ), ], }, ), }, ), operator: Addition, right: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "optionalString", span: Span { start: Position { line: 496, column: 11, }, end: Position { line: 496, column: 25, }, }, }, ), arguments: [ BinaryOperation( BinaryOperation { left: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "config", span: Span { start: Position { line: 496, column: 27, }, end: Position { line: 496, column: 33, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "security", span: Span { start: Position { line: 496, column: 34, }, end: Position { line: 496, column: 42, }, }, }, ), Raw( PartRaw { content: "pam", span: Span { start: Position { line: 496, column: 43, }, end: Position { line: 496, column: 46, }, }, }, ), Raw( PartRaw { content: "enableSSHAgentAuth", span: Span { start: Position { line: 496, column: 47, }, end: Position { line: 496, column: 65, }, }, }, ), ], default: None, }, ), operator: LogicalAnd, right: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "cfg", span: Span { start: Position { line: 496, column: 69, }, end: Position { line: 496, column: 72, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "sshAgentAuth", span: Span { start: Position { line: 496, column: 73, }, end: Position { line: 496, column: 85, }, }, }, ), ], default: None, }, ), }, ), IndentedString( IndentedString { parts: [ Raw( PartRaw { content: "auth sufficient ", span: Span { start: Position { line: 497, column: 1, }, end: Position { line: 497, column: 29, }, }, }, ), Interpolation( PartInterpolation { expression: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "pkgs", span: Span { start: Position { line: 497, column: 31, }, end: Position { line: 497, column: 35, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "pam_ssh_agent_auth", span: Span { start: Position { line: 497, column: 36, }, end: Position { line: 497, column: 54, }, }, }, ), ], default: None, }, ), }, ), Raw( PartRaw { content: "/libexec/pam_ssh_agent_auth.so file=", span: Span { start: Position { line: 497, column: 1, }, end: Position { line: 497, column: 91, }, }, }, ), Interpolation( PartInterpolation { expression: FunctionApplication( FunctionApplication { function: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "lib", span: Span { start: Position { line: 497, column: 93, }, end: Position { line: 497, column: 96, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "concatStringsSep", span: Span { start: Position { line: 497, column: 97, }, end: Position { line: 497, column: 113, }, }, }, ), ], default: None, }, ), arguments: [ String( String_ { parts: [ Raw( PartRaw { content: ":", span: Span { start: Position { line: 497, column: 115, }, end: Position { line: 497, column: 116, }, }, }, ), ], span: Span { start: Position { line: 497, column: 114, }, end: Position { line: 497, column: 117, }, }, }, ), PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "config", span: Span { start: Position { line: 497, column: 118, }, end: Position { line: 497, column: 124, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "services", span: Span { start: Position { line: 497, column: 125, }, end: Position { line: 497, column: 133, }, }, }, ), Raw( PartRaw { content: "openssh", span: Span { start: Position { line: 497, column: 134, }, end: Position { line: 497, column: 141, }, }, }, ), Raw( PartRaw { content: "authorizedKeysFiles", span: Span { start: Position { line: 497, column: 142, }, end: Position { line: 497, column: 161, }, }, }, ), ], default: None, }, ), ], }, ), }, ), Raw( PartRaw { content: "\n", span: Span { start: Position { line: 497, column: 1, }, end: Position { line: 498, column: 11, }, }, }, ), ], span: Span { start: Position { line: 496, column: 87, }, end: Position { line: 498, column: 13, }, }, }, ), ], }, ), }, ), operator: Addition, right: LetIn( LetIn { bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "p11", span: Span { start: Position { line: 499, column: 16, }, end: Position { line: 499, column: 19, }, }, }, ), ], to: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "config", span: Span { start: Position { line: 499, column: 22, }, end: Position { line: 499, column: 28, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "security", span: Span { start: Position { line: 499, column: 29, }, end: Position { line: 499, column: 37, }, }, }, ), Raw( PartRaw { content: "pam", span: Span { start: Position { line: 499, column: 38, }, end: Position { line: 499, column: 41, }, }, }, ), Raw( PartRaw { content: "p11", span: Span { start: Position { line: 499, column: 42, }, end: Position { line: 499, column: 45, }, }, }, ), ], default: None, }, ), }, ), ], target: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "optionalString", span: Span { start: Position { line: 499, column: 50, }, end: Position { line: 499, column: 64, }, }, }, ), arguments: [ PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "cfg", span: Span { start: Position { line: 499, column: 65, }, end: Position { line: 499, column: 68, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "p11Auth", span: Span { start: Position { line: 499, column: 69, }, end: Position { line: 499, column: 76, }, }, }, ), ], default: None, }, ), IndentedString( IndentedString { parts: [ Raw( PartRaw { content: "auth ", span: Span { start: Position { line: 500, column: 1, }, end: Position { line: 500, column: 18, }, }, }, ), Interpolation( PartInterpolation { expression: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "p11", span: Span { start: Position { line: 500, column: 20, }, end: Position { line: 500, column: 23, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "control", span: Span { start: Position { line: 500, column: 24, }, end: Position { line: 500, column: 31, }, }, }, ), ], default: None, }, ), }, ), Raw( PartRaw { content: " ", span: Span { start: Position { line: 500, column: 1, }, end: Position { line: 500, column: 33, }, }, }, ), Interpolation( PartInterpolation { expression: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "pkgs", span: Span { start: Position { line: 500, column: 35, }, end: Position { line: 500, column: 39, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "pam_p11", span: Span { start: Position { line: 500, column: 40, }, end: Position { line: 500, column: 47, }, }, }, ), ], default: None, }, ), }, ), Raw( PartRaw { content: "/lib/security/pam_p11.so ", span: Span { start: Position { line: 500, column: 1, }, end: Position { line: 500, column: 73, }, }, }, ), Interpolation( PartInterpolation { expression: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "pkgs", span: Span { start: Position { line: 500, column: 75, }, end: Position { line: 500, column: 79, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "opensc", span: Span { start: Position { line: 500, column: 80, }, end: Position { line: 500, column: 86, }, }, }, ), ], default: None, }, ), }, ), Raw( PartRaw { content: "/lib/opensc-pkcs11.so\n", span: Span { start: Position { line: 500, column: 1, }, end: Position { line: 501, column: 11, }, }, }, ), ], span: Span { start: Position { line: 499, column: 77, }, end: Position { line: 501, column: 13, }, }, }, ), ], }, ), span: Span { start: Position { line: 499, column: 12, }, end: Position { line: 501, column: 13, }, }, }, ), }, ), operator: Addition, right: LetIn( LetIn { bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "u2f", span: Span { start: Position { line: 502, column: 16, }, end: Position { line: 502, column: 19, }, }, }, ), ], to: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "config", span: Span { start: Position { line: 502, column: 22, }, end: Position { line: 502, column: 28, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "security", span: Span { start: Position { line: 502, column: 29, }, end: Position { line: 502, column: 37, }, }, }, ), Raw( PartRaw { content: "pam", span: Span { start: Position { line: 502, column: 38, }, end: Position { line: 502, column: 41, }, }, }, ), Raw( PartRaw { content: "u2f", span: Span { start: Position { line: 502, column: 42, }, end: Position { line: 502, column: 45, }, }, }, ), ], default: None, }, ), }, ), ], target: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "optionalString", span: Span { start: Position { line: 502, column: 50, }, end: Position { line: 502, column: 64, }, }, }, ), arguments: [ PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "cfg", span: Span { start: Position { line: 502, column: 65, }, end: Position { line: 502, column: 68, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "u2fAuth", span: Span { start: Position { line: 502, column: 69, }, end: Position { line: 502, column: 76, }, }, }, ), ], default: None, }, ), BinaryOperation( BinaryOperation { left: IndentedString( IndentedString { parts: [ Raw( PartRaw { content: " auth ", span: Span { start: Position { line: 503, column: 1, }, end: Position { line: 503, column: 20, }, }, }, ), Interpolation( PartInterpolation { expression: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "u2f", span: Span { start: Position { line: 503, column: 22, }, end: Position { line: 503, column: 25, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "control", span: Span { start: Position { line: 503, column: 26, }, end: Position { line: 503, column: 33, }, }, }, ), ], default: None, }, ), }, ), Raw( PartRaw { content: " ", span: Span { start: Position { line: 503, column: 1, }, end: Position { line: 503, column: 35, }, }, }, ), Interpolation( PartInterpolation { expression: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "pkgs", span: Span { start: Position { line: 503, column: 37, }, end: Position { line: 503, column: 41, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "pam_u2f", span: Span { start: Position { line: 503, column: 42, }, end: Position { line: 503, column: 49, }, }, }, ), ], default: None, }, ), }, ), Raw( PartRaw { content: "/lib/security/pam_u2f.so ", span: Span { start: Position { line: 503, column: 1, }, end: Position { line: 503, column: 75, }, }, }, ), Interpolation( PartInterpolation { expression: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "optionalString", span: Span { start: Position { line: 503, column: 77, }, end: Position { line: 503, column: 91, }, }, }, ), arguments: [ PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "u2f", span: Span { start: Position { line: 503, column: 92, }, end: Position { line: 503, column: 95, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "debug", span: Span { start: Position { line: 503, column: 96, }, end: Position { line: 503, column: 101, }, }, }, ), ], default: None, }, ), String( String_ { parts: [ Raw( PartRaw { content: "debug", span: Span { start: Position { line: 503, column: 103, }, end: Position { line: 503, column: 108, }, }, }, ), ], span: Span { start: Position { line: 503, column: 102, }, end: Position { line: 503, column: 109, }, }, }, ), ], }, ), }, ), Raw( PartRaw { content: " ", span: Span { start: Position { line: 503, column: 1, }, end: Position { line: 503, column: 111, }, }, }, ), Interpolation( PartInterpolation { expression: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "optionalString", span: Span { start: Position { line: 503, column: 113, }, end: Position { line: 503, column: 127, }, }, }, ), arguments: [ BinaryOperation( BinaryOperation { left: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "u2f", span: Span { start: Position { line: 503, column: 129, }, end: Position { line: 503, column: 132, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "authFile", span: Span { start: Position { line: 503, column: 133, }, end: Position { line: 503, column: 141, }, }, }, ), ], default: None, }, ), operator: NotEqualTo, right: Identifier( Identifier { id: "null", span: Span { start: Position { line: 503, column: 145, }, end: Position { line: 503, column: 149, }, }, }, ), }, ), String( String_ { parts: [ Raw( PartRaw { content: "authfile=", span: Span { start: Position { line: 503, column: 152, }, end: Position { line: 503, column: 176, }, }, }, ), Interpolation( PartInterpolation { expression: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "u2f", span: Span { start: Position { line: 503, column: 163, }, end: Position { line: 503, column: 166, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "authFile", span: Span { start: Position { line: 503, column: 167, }, end: Position { line: 503, column: 175, }, }, }, ), ], default: None, }, ), }, ), ], span: Span { start: Position { line: 503, column: 151, }, end: Position { line: 503, column: 177, }, }, }, ), ], }, ), }, ), Raw( PartRaw { content: " ", span: Span { start: Position { line: 503, column: 1, }, end: Position { line: 503, column: 179, }, }, }, ), ], span: Span { start: Position { line: 502, column: 78, }, end: Position { line: 503, column: 181, }, }, }, ), operator: Addition, right: IndentedString( IndentedString { parts: [ Interpolation( PartInterpolation { expression: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "optionalString", span: Span { start: Position { line: 504, column: 23, }, end: Position { line: 504, column: 37, }, }, }, ), arguments: [ PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "u2f", span: Span { start: Position { line: 504, column: 38, }, end: Position { line: 504, column: 41, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "interactive", span: Span { start: Position { line: 504, column: 42, }, end: Position { line: 504, column: 53, }, }, }, ), ], default: None, }, ), String( String_ { parts: [ Raw( PartRaw { content: "interactive", span: Span { start: Position { line: 504, column: 55, }, end: Position { line: 504, column: 66, }, }, }, ), ], span: Span { start: Position { line: 504, column: 54, }, end: Position { line: 504, column: 67, }, }, }, ), ], }, ), }, ), Raw( PartRaw { content: " ", span: Span { start: Position { line: 504, column: 21, }, end: Position { line: 504, column: 69, }, }, }, ), Interpolation( PartInterpolation { expression: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "optionalString", span: Span { start: Position { line: 504, column: 71, }, end: Position { line: 504, column: 85, }, }, }, ), arguments: [ PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "u2f", span: Span { start: Position { line: 504, column: 86, }, end: Position { line: 504, column: 89, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "cue", span: Span { start: Position { line: 504, column: 90, }, end: Position { line: 504, column: 93, }, }, }, ), ], default: None, }, ), String( String_ { parts: [ Raw( PartRaw { content: "cue", span: Span { start: Position { line: 504, column: 95, }, end: Position { line: 504, column: 98, }, }, }, ), ], span: Span { start: Position { line: 504, column: 94, }, end: Position { line: 504, column: 99, }, }, }, ), ], }, ), }, ), Raw( PartRaw { content: " ", span: Span { start: Position { line: 504, column: 21, }, end: Position { line: 504, column: 101, }, }, }, ), Interpolation( PartInterpolation { expression: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "optionalString", span: Span { start: Position { line: 504, column: 103, }, end: Position { line: 504, column: 117, }, }, }, ), arguments: [ BinaryOperation( BinaryOperation { left: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "u2f", span: Span { start: Position { line: 504, column: 119, }, end: Position { line: 504, column: 122, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "appId", span: Span { start: Position { line: 504, column: 123, }, end: Position { line: 504, column: 128, }, }, }, ), ], default: None, }, ), operator: NotEqualTo, right: Identifier( Identifier { id: "null", span: Span { start: Position { line: 504, column: 132, }, end: Position { line: 504, column: 136, }, }, }, ), }, ), String( String_ { parts: [ Raw( PartRaw { content: "appid=", span: Span { start: Position { line: 504, column: 139, }, end: Position { line: 504, column: 157, }, }, }, ), Interpolation( PartInterpolation { expression: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "u2f", span: Span { start: Position { line: 504, column: 147, }, end: Position { line: 504, column: 150, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "appId", span: Span { start: Position { line: 504, column: 151, }, end: Position { line: 504, column: 156, }, }, }, ), ], default: None, }, ), }, ), ], span: Span { start: Position { line: 504, column: 138, }, end: Position { line: 504, column: 158, }, }, }, ), ], }, ), }, ), Raw( PartRaw { content: " ", span: Span { start: Position { line: 504, column: 21, }, end: Position { line: 504, column: 160, }, }, }, ), Interpolation( PartInterpolation { expression: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "optionalString", span: Span { start: Position { line: 504, column: 162, }, end: Position { line: 504, column: 176, }, }, }, ), arguments: [ BinaryOperation( BinaryOperation { left: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "u2f", span: Span { start: Position { line: 504, column: 178, }, end: Position { line: 504, column: 181, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "origin", span: Span { start: Position { line: 504, column: 182, }, end: Position { line: 504, column: 188, }, }, }, ), ], default: None, }, ), operator: NotEqualTo, right: Identifier( Identifier { id: "null", span: Span { start: Position { line: 504, column: 192, }, end: Position { line: 504, column: 196, }, }, }, ), }, ), String( String_ { parts: [ Raw( PartRaw { content: "origin=", span: Span { start: Position { line: 504, column: 199, }, end: Position { line: 504, column: 219, }, }, }, ), Interpolation( PartInterpolation { expression: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "u2f", span: Span { start: Position { line: 504, column: 208, }, end: Position { line: 504, column: 211, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "origin", span: Span { start: Position { line: 504, column: 212, }, end: Position { line: 504, column: 218, }, }, }, ), ], default: None, }, ), }, ), ], span: Span { start: Position { line: 504, column: 198, }, end: Position { line: 504, column: 220, }, }, }, ), ], }, ), }, ), Raw( PartRaw { content: "\n", span: Span { start: Position { line: 504, column: 21, }, end: Position { line: 505, column: 11, }, }, }, ), ], span: Span { start: Position { line: 504, column: 19, }, end: Position { line: 505, column: 13, }, }, }, ), }, ), ], }, ), span: Span { start: Position { line: 502, column: 12, }, end: Position { line: 505, column: 14, }, }, }, ), }, ), operator: Addition, right: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "optionalString", span: Span { start: Position { line: 506, column: 11, }, end: Position { line: 506, column: 25, }, }, }, ), arguments: [ PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "cfg", span: Span { start: Position { line: 506, column: 26, }, end: Position { line: 506, column: 29, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "usbAuth", span: Span { start: Position { line: 506, column: 30, }, end: Position { line: 506, column: 37, }, }, }, ), ], default: None, }, ), IndentedString( IndentedString { parts: [ Raw( PartRaw { content: "auth sufficient ", span: Span { start: Position { line: 507, column: 1, }, end: Position { line: 507, column: 29, }, }, }, ), Interpolation( PartInterpolation { expression: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "pkgs", span: Span { start: Position { line: 507, column: 31, }, end: Position { line: 507, column: 35, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "pam_usb", span: Span { start: Position { line: 507, column: 36, }, end: Position { line: 507, column: 43, }, }, }, ), ], default: None, }, ), }, ), Raw( PartRaw { content: "/lib/security/pam_usb.so\n", span: Span { start: Position { line: 507, column: 1, }, end: Position { line: 508, column: 11, }, }, }, ), ], span: Span { start: Position { line: 506, column: 38, }, end: Position { line: 508, column: 13, }, }, }, ), ], }, ), }, ), operator: Addition, right: LetIn( LetIn { bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "ussh", span: Span { start: Position { line: 509, column: 16, }, end: Position { line: 509, column: 20, }, }, }, ), ], to: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "config", span: Span { start: Position { line: 509, column: 23, }, end: Position { line: 509, column: 29, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "security", span: Span { start: Position { line: 509, column: 30, }, end: Position { line: 509, column: 38, }, }, }, ), Raw( PartRaw { content: "pam", span: Span { start: Position { line: 509, column: 39, }, end: Position { line: 509, column: 42, }, }, }, ), Raw( PartRaw { content: "ussh", span: Span { start: Position { line: 509, column: 43, }, end: Position { line: 509, column: 47, }, }, }, ), ], default: None, }, ), }, ), ], target: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "optionalString", span: Span { start: Position { line: 509, column: 52, }, end: Position { line: 509, column: 66, }, }, }, ), arguments: [ BinaryOperation( BinaryOperation { left: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "config", span: Span { start: Position { line: 509, column: 68, }, end: Position { line: 509, column: 74, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "security", span: Span { start: Position { line: 509, column: 75, }, end: Position { line: 509, column: 83, }, }, }, ), Raw( PartRaw { content: "pam", span: Span { start: Position { line: 509, column: 84, }, end: Position { line: 509, column: 87, }, }, }, ), Raw( PartRaw { content: "ussh", span: Span { start: Position { line: 509, column: 88, }, end: Position { line: 509, column: 92, }, }, }, ), Raw( PartRaw { content: "enable", span: Span { start: Position { line: 509, column: 93, }, end: Position { line: 509, column: 99, }, }, }, ), ], default: None, }, ), operator: LogicalAnd, right: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "cfg", span: Span { start: Position { line: 509, column: 103, }, end: Position { line: 509, column: 106, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "usshAuth", span: Span { start: Position { line: 509, column: 107, }, end: Position { line: 509, column: 115, }, }, }, ), ], default: None, }, ), }, ), IndentedString( IndentedString { parts: [ Raw( PartRaw { content: "auth ", span: Span { start: Position { line: 510, column: 1, }, end: Position { line: 510, column: 18, }, }, }, ), Interpolation( PartInterpolation { expression: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "ussh", span: Span { start: Position { line: 510, column: 20, }, end: Position { line: 510, column: 24, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "control", span: Span { start: Position { line: 510, column: 25, }, end: Position { line: 510, column: 32, }, }, }, ), ], default: None, }, ), }, ), Raw( PartRaw { content: " ", span: Span { start: Position { line: 510, column: 1, }, end: Position { line: 510, column: 34, }, }, }, ), Interpolation( PartInterpolation { expression: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "pkgs", span: Span { start: Position { line: 510, column: 36, }, end: Position { line: 510, column: 40, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "pam_ussh", span: Span { start: Position { line: 510, column: 41, }, end: Position { line: 510, column: 49, }, }, }, ), ], default: None, }, ), }, ), Raw( PartRaw { content: "/lib/security/pam_ussh.so ", span: Span { start: Position { line: 510, column: 1, }, end: Position { line: 510, column: 76, }, }, }, ), Interpolation( PartInterpolation { expression: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "optionalString", span: Span { start: Position { line: 510, column: 78, }, end: Position { line: 510, column: 92, }, }, }, ), arguments: [ BinaryOperation( BinaryOperation { left: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "ussh", span: Span { start: Position { line: 510, column: 94, }, end: Position { line: 510, column: 98, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "caFile", span: Span { start: Position { line: 510, column: 99, }, end: Position { line: 510, column: 105, }, }, }, ), ], default: None, }, ), operator: NotEqualTo, right: Identifier( Identifier { id: "null", span: Span { start: Position { line: 510, column: 109, }, end: Position { line: 510, column: 113, }, }, }, ), }, ), String( String_ { parts: [ Raw( PartRaw { content: "ca_file=", span: Span { start: Position { line: 510, column: 116, }, end: Position { line: 510, column: 138, }, }, }, ), Interpolation( PartInterpolation { expression: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "ussh", span: Span { start: Position { line: 510, column: 126, }, end: Position { line: 510, column: 130, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "caFile", span: Span { start: Position { line: 510, column: 131, }, end: Position { line: 510, column: 137, }, }, }, ), ], default: None, }, ), }, ), ], span: Span { start: Position { line: 510, column: 115, }, end: Position { line: 510, column: 139, }, }, }, ), ], }, ), }, ), Raw( PartRaw { content: " ", span: Span { start: Position { line: 510, column: 1, }, end: Position { line: 510, column: 141, }, }, }, ), Interpolation( PartInterpolation { expression: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "optionalString", span: Span { start: Position { line: 510, column: 143, }, end: Position { line: 510, column: 157, }, }, }, ), arguments: [ BinaryOperation( BinaryOperation { left: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "ussh", span: Span { start: Position { line: 510, column: 159, }, end: Position { line: 510, column: 163, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "authorizedPrincipals", span: Span { start: Position { line: 510, column: 164, }, end: Position { line: 510, column: 184, }, }, }, ), ], default: None, }, ), operator: NotEqualTo, right: Identifier( Identifier { id: "null", span: Span { start: Position { line: 510, column: 188, }, end: Position { line: 510, column: 192, }, }, }, ), }, ), String( String_ { parts: [ Raw( PartRaw { content: "authorized_principals=", span: Span { start: Position { line: 510, column: 195, }, end: Position { line: 510, column: 245, }, }, }, ), Interpolation( PartInterpolation { expression: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "ussh", span: Span { start: Position { line: 510, column: 219, }, end: Position { line: 510, column: 223, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "authorizedPrincipals", span: Span { start: Position { line: 510, column: 224, }, end: Position { line: 510, column: 244, }, }, }, ), ], default: None, }, ), }, ), ], span: Span { start: Position { line: 510, column: 194, }, end: Position { line: 510, column: 246, }, }, }, ), ], }, ), }, ), Raw( PartRaw { content: " ", span: Span { start: Position { line: 510, column: 1, }, end: Position { line: 510, column: 248, }, }, }, ), Interpolation( PartInterpolation { expression: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "optionalString", span: Span { start: Position { line: 510, column: 250, }, end: Position { line: 510, column: 264, }, }, }, ), arguments: [ BinaryOperation( BinaryOperation { left: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "ussh", span: Span { start: Position { line: 510, column: 266, }, end: Position { line: 510, column: 270, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "authorizedPrincipalsFile", span: Span { start: Position { line: 510, column: 271, }, end: Position { line: 510, column: 295, }, }, }, ), ], default: None, }, ), operator: NotEqualTo, right: Identifier( Identifier { id: "null", span: Span { start: Position { line: 510, column: 299, }, end: Position { line: 510, column: 303, }, }, }, ), }, ), String( String_ { parts: [ Raw( PartRaw { content: "authorized_principals_file=", span: Span { start: Position { line: 510, column: 306, }, end: Position { line: 510, column: 365, }, }, }, ), Interpolation( PartInterpolation { expression: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "ussh", span: Span { start: Position { line: 510, column: 335, }, end: Position { line: 510, column: 339, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "authorizedPrincipalsFile", span: Span { start: Position { line: 510, column: 340, }, end: Position { line: 510, column: 364, }, }, }, ), ], default: None, }, ), }, ), ], span: Span { start: Position { line: 510, column: 305, }, end: Position { line: 510, column: 366, }, }, }, ), ], }, ), }, ), Raw( PartRaw { content: " ", span: Span { start: Position { line: 510, column: 1, }, end: Position { line: 510, column: 368, }, }, }, ), Interpolation( PartInterpolation { expression: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "optionalString", span: Span { start: Position { line: 510, column: 370, }, end: Position { line: 510, column: 384, }, }, }, ), arguments: [ BinaryOperation( BinaryOperation { left: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "ussh", span: Span { start: Position { line: 510, column: 386, }, end: Position { line: 510, column: 390, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "group", span: Span { start: Position { line: 510, column: 391, }, end: Position { line: 510, column: 396, }, }, }, ), ], default: None, }, ), operator: NotEqualTo, right: Identifier( Identifier { id: "null", span: Span { start: Position { line: 510, column: 400, }, end: Position { line: 510, column: 404, }, }, }, ), }, ), String( String_ { parts: [ Raw( PartRaw { content: "group=", span: Span { start: Position { line: 510, column: 407, }, end: Position { line: 510, column: 426, }, }, }, ), Interpolation( PartInterpolation { expression: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "ussh", span: Span { start: Position { line: 510, column: 415, }, end: Position { line: 510, column: 419, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "group", span: Span { start: Position { line: 510, column: 420, }, end: Position { line: 510, column: 425, }, }, }, ), ], default: None, }, ), }, ), ], span: Span { start: Position { line: 510, column: 406, }, end: Position { line: 510, column: 427, }, }, }, ), ], }, ), }, ), Raw( PartRaw { content: "\n", span: Span { start: Position { line: 510, column: 1, }, end: Position { line: 511, column: 11, }, }, }, ), ], span: Span { start: Position { line: 509, column: 117, }, end: Position { line: 511, column: 13, }, }, }, ), ], }, ), span: Span { start: Position { line: 509, column: 12, }, end: Position { line: 511, column: 13, }, }, }, ), }, ), operator: Addition, right: LetIn( LetIn { bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "oath", span: Span { start: Position { line: 512, column: 16, }, end: Position { line: 512, column: 20, }, }, }, ), ], to: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "config", span: Span { start: Position { line: 512, column: 23, }, end: Position { line: 512, column: 29, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "security", span: Span { start: Position { line: 512, column: 30, }, end: Position { line: 512, column: 38, }, }, }, ), Raw( PartRaw { content: "pam", span: Span { start: Position { line: 512, column: 39, }, end: Position { line: 512, column: 42, }, }, }, ), Raw( PartRaw { content: "oath", span: Span { start: Position { line: 512, column: 43, }, end: Position { line: 512, column: 47, }, }, }, ), ], default: None, }, ), }, ), ], target: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "optionalString", span: Span { start: Position { line: 512, column: 52, }, end: Position { line: 512, column: 66, }, }, }, ), arguments: [ PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "cfg", span: Span { start: Position { line: 512, column: 67, }, end: Position { line: 512, column: 70, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "oathAuth", span: Span { start: Position { line: 512, column: 71, }, end: Position { line: 512, column: 79, }, }, }, ), ], default: None, }, ), IndentedString( IndentedString { parts: [ Raw( PartRaw { content: "auth requisite ", span: Span { start: Position { line: 513, column: 1, }, end: Position { line: 513, column: 28, }, }, }, ), Interpolation( PartInterpolation { expression: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "pkgs", span: Span { start: Position { line: 513, column: 30, }, end: Position { line: 513, column: 34, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "oath-toolkit", span: Span { start: Position { line: 513, column: 35, }, end: Position { line: 513, column: 47, }, }, }, ), ], default: None, }, ), }, ), Raw( PartRaw { content: "/lib/security/pam_oath.so window=", span: Span { start: Position { line: 513, column: 1, }, end: Position { line: 513, column: 81, }, }, }, ), Interpolation( PartInterpolation { expression: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "toString", span: Span { start: Position { line: 513, column: 83, }, end: Position { line: 513, column: 91, }, }, }, ), arguments: [ PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "oath", span: Span { start: Position { line: 513, column: 92, }, end: Position { line: 513, column: 96, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "window", span: Span { start: Position { line: 513, column: 97, }, end: Position { line: 513, column: 103, }, }, }, ), ], default: None, }, ), ], }, ), }, ), Raw( PartRaw { content: " usersfile=", span: Span { start: Position { line: 513, column: 1, }, end: Position { line: 513, column: 115, }, }, }, ), Interpolation( PartInterpolation { expression: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "toString", span: Span { start: Position { line: 513, column: 117, }, end: Position { line: 513, column: 125, }, }, }, ), arguments: [ PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "oath", span: Span { start: Position { line: 513, column: 126, }, end: Position { line: 513, column: 130, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "usersFile", span: Span { start: Position { line: 513, column: 131, }, end: Position { line: 513, column: 140, }, }, }, ), ], default: None, }, ), ], }, ), }, ), Raw( PartRaw { content: " digits=", span: Span { start: Position { line: 513, column: 1, }, end: Position { line: 513, column: 149, }, }, }, ), Interpolation( PartInterpolation { expression: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "toString", span: Span { start: Position { line: 513, column: 151, }, end: Position { line: 513, column: 159, }, }, }, ), arguments: [ PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "oath", span: Span { start: Position { line: 513, column: 160, }, end: Position { line: 513, column: 164, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "digits", span: Span { start: Position { line: 513, column: 165, }, end: Position { line: 513, column: 171, }, }, }, ), ], default: None, }, ), ], }, ), }, ), Raw( PartRaw { content: "\n", span: Span { start: Position { line: 513, column: 1, }, end: Position { line: 514, column: 11, }, }, }, ), ], span: Span { start: Position { line: 512, column: 80, }, end: Position { line: 514, column: 13, }, }, }, ), ], }, ), span: Span { start: Position { line: 512, column: 12, }, end: Position { line: 514, column: 13, }, }, }, ), }, ), operator: Addition, right: LetIn( LetIn { bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "yubi", span: Span { start: Position { line: 515, column: 16, }, end: Position { line: 515, column: 20, }, }, }, ), ], to: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "config", span: Span { start: Position { line: 515, column: 23, }, end: Position { line: 515, column: 29, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "security", span: Span { start: Position { line: 515, column: 30, }, end: Position { line: 515, column: 38, }, }, }, ), Raw( PartRaw { content: "pam", span: Span { start: Position { line: 515, column: 39, }, end: Position { line: 515, column: 42, }, }, }, ), Raw( PartRaw { content: "yubico", span: Span { start: Position { line: 515, column: 43, }, end: Position { line: 515, column: 49, }, }, }, ), ], default: None, }, ), }, ), ], target: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "optionalString", span: Span { start: Position { line: 515, column: 54, }, end: Position { line: 515, column: 68, }, }, }, ), arguments: [ PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "cfg", span: Span { start: Position { line: 515, column: 69, }, end: Position { line: 515, column: 72, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "yubicoAuth", span: Span { start: Position { line: 515, column: 73, }, end: Position { line: 515, column: 83, }, }, }, ), ], default: None, }, ), IndentedString( IndentedString { parts: [ Raw( PartRaw { content: "auth ", span: Span { start: Position { line: 516, column: 1, }, end: Position { line: 516, column: 18, }, }, }, ), Interpolation( PartInterpolation { expression: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "yubi", span: Span { start: Position { line: 516, column: 20, }, end: Position { line: 516, column: 24, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "control", span: Span { start: Position { line: 516, column: 25, }, end: Position { line: 516, column: 32, }, }, }, ), ], default: None, }, ), }, ), Raw( PartRaw { content: " ", span: Span { start: Position { line: 516, column: 1, }, end: Position { line: 516, column: 34, }, }, }, ), Interpolation( PartInterpolation { expression: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "pkgs", span: Span { start: Position { line: 516, column: 36, }, end: Position { line: 516, column: 40, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "yubico-pam", span: Span { start: Position { line: 516, column: 41, }, end: Position { line: 516, column: 51, }, }, }, ), ], default: None, }, ), }, ), Raw( PartRaw { content: "/lib/security/pam_yubico.so mode=", span: Span { start: Position { line: 516, column: 1, }, end: Position { line: 516, column: 85, }, }, }, ), Interpolation( PartInterpolation { expression: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "toString", span: Span { start: Position { line: 516, column: 87, }, end: Position { line: 516, column: 95, }, }, }, ), arguments: [ PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "yubi", span: Span { start: Position { line: 516, column: 96, }, end: Position { line: 516, column: 100, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "mode", span: Span { start: Position { line: 516, column: 101, }, end: Position { line: 516, column: 105, }, }, }, ), ], default: None, }, ), ], }, ), }, ), Raw( PartRaw { content: " ", span: Span { start: Position { line: 516, column: 1, }, end: Position { line: 516, column: 107, }, }, }, ), Interpolation( PartInterpolation { expression: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "optionalString", span: Span { start: Position { line: 516, column: 109, }, end: Position { line: 516, column: 123, }, }, }, ), arguments: [ BinaryOperation( BinaryOperation { left: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "yubi", span: Span { start: Position { line: 516, column: 125, }, end: Position { line: 516, column: 129, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "challengeResponsePath", span: Span { start: Position { line: 516, column: 130, }, end: Position { line: 516, column: 151, }, }, }, ), ], default: None, }, ), operator: NotEqualTo, right: Identifier( Identifier { id: "null", span: Span { start: Position { line: 516, column: 155, }, end: Position { line: 516, column: 159, }, }, }, ), }, ), String( String_ { parts: [ Raw( PartRaw { content: "chalresp_path=", span: Span { start: Position { line: 516, column: 162, }, end: Position { line: 516, column: 205, }, }, }, ), Interpolation( PartInterpolation { expression: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "yubi", span: Span { start: Position { line: 516, column: 178, }, end: Position { line: 516, column: 182, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "challengeResponsePath", span: Span { start: Position { line: 516, column: 183, }, end: Position { line: 516, column: 204, }, }, }, ), ], default: None, }, ), }, ), ], span: Span { start: Position { line: 516, column: 161, }, end: Position { line: 516, column: 206, }, }, }, ), ], }, ), }, ), Raw( PartRaw { content: " ", span: Span { start: Position { line: 516, column: 1, }, end: Position { line: 516, column: 208, }, }, }, ), Interpolation( PartInterpolation { expression: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "optionalString", span: Span { start: Position { line: 516, column: 210, }, end: Position { line: 516, column: 224, }, }, }, ), arguments: [ BinaryOperation( BinaryOperation { left: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "yubi", span: Span { start: Position { line: 516, column: 226, }, end: Position { line: 516, column: 230, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "mode", span: Span { start: Position { line: 516, column: 231, }, end: Position { line: 516, column: 235, }, }, }, ), ], default: None, }, ), operator: EqualTo, right: String( String_ { parts: [ Raw( PartRaw { content: "client", span: Span { start: Position { line: 516, column: 240, }, end: Position { line: 516, column: 246, }, }, }, ), ], span: Span { start: Position { line: 516, column: 239, }, end: Position { line: 516, column: 247, }, }, }, ), }, ), String( String_ { parts: [ Raw( PartRaw { content: "id=", span: Span { start: Position { line: 516, column: 250, }, end: Position { line: 516, column: 272, }, }, }, ), Interpolation( PartInterpolation { expression: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "toString", span: Span { start: Position { line: 516, column: 255, }, end: Position { line: 516, column: 263, }, }, }, ), arguments: [ PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "yubi", span: Span { start: Position { line: 516, column: 264, }, end: Position { line: 516, column: 268, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "id", span: Span { start: Position { line: 516, column: 269, }, end: Position { line: 516, column: 271, }, }, }, ), ], default: None, }, ), ], }, ), }, ), ], span: Span { start: Position { line: 516, column: 249, }, end: Position { line: 516, column: 273, }, }, }, ), ], }, ), }, ), Raw( PartRaw { content: " ", span: Span { start: Position { line: 516, column: 1, }, end: Position { line: 516, column: 275, }, }, }, ), Interpolation( PartInterpolation { expression: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "optionalString", span: Span { start: Position { line: 516, column: 277, }, end: Position { line: 516, column: 291, }, }, }, ), arguments: [ PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "yubi", span: Span { start: Position { line: 516, column: 292, }, end: Position { line: 516, column: 296, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "debug", span: Span { start: Position { line: 516, column: 297, }, end: Position { line: 516, column: 302, }, }, }, ), ], default: None, }, ), String( String_ { parts: [ Raw( PartRaw { content: "debug", span: Span { start: Position { line: 516, column: 304, }, end: Position { line: 516, column: 309, }, }, }, ), ], span: Span { start: Position { line: 516, column: 303, }, end: Position { line: 516, column: 310, }, }, }, ), ], }, ), }, ), Raw( PartRaw { content: "\n", span: Span { start: Position { line: 516, column: 1, }, end: Position { line: 517, column: 11, }, }, }, ), ], span: Span { start: Position { line: 515, column: 84, }, end: Position { line: 517, column: 13, }, }, }, ), ], }, ), span: Span { start: Position { line: 515, column: 12, }, end: Position { line: 517, column: 13, }, }, }, ), }, ), operator: Addition, right: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "optionalString", span: Span { start: Position { line: 518, column: 11, }, end: Position { line: 518, column: 25, }, }, }, ), arguments: [ PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "cfg", span: Span { start: Position { line: 518, column: 26, }, end: Position { line: 518, column: 29, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "fprintAuth", span: Span { start: Position { line: 518, column: 30, }, end: Position { line: 518, column: 40, }, }, }, ), ], default: None, }, ), IndentedString( IndentedString { parts: [ Raw( PartRaw { content: "auth sufficient ", span: Span { start: Position { line: 519, column: 1, }, end: Position { line: 519, column: 29, }, }, }, ), Interpolation( PartInterpolation { expression: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "pkgs", span: Span { start: Position { line: 519, column: 31, }, end: Position { line: 519, column: 35, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "fprintd", span: Span { start: Position { line: 519, column: 36, }, end: Position { line: 519, column: 43, }, }, }, ), ], default: None, }, ), }, ), Raw( PartRaw { content: "/lib/security/pam_fprintd.so\n", span: Span { start: Position { line: 519, column: 1, }, end: Position { line: 520, column: 11, }, }, }, ), ], span: Span { start: Position { line: 518, column: 41, }, end: Position { line: 520, column: 13, }, }, }, ), ], }, ), }, ), operator: Addition, right: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "optionalString", span: Span { start: Position { line: 527, column: 12, }, end: Position { line: 527, column: 26, }, }, }, ), arguments: [ BinaryOperation( BinaryOperation { left: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "cfg", span: Span { start: Position { line: 527, column: 28, }, end: Position { line: 527, column: 31, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "unixAuth", span: Span { start: Position { line: 527, column: 32, }, end: Position { line: 527, column: 40, }, }, }, ), ], default: None, }, ), operator: LogicalAnd, right: BinaryOperation( BinaryOperation { left: BinaryOperation( BinaryOperation { left: BinaryOperation( BinaryOperation { left: BinaryOperation( BinaryOperation { left: BinaryOperation( BinaryOperation { left: BinaryOperation( BinaryOperation { left: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "config", span: Span { start: Position { line: 528, column: 14, }, end: Position { line: 528, column: 20, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "security", span: Span { start: Position { line: 528, column: 21, }, end: Position { line: 528, column: 29, }, }, }, ), Raw( PartRaw { content: "pam", span: Span { start: Position { line: 528, column: 30, }, end: Position { line: 528, column: 33, }, }, }, ), Raw( PartRaw { content: "enableEcryptfs", span: Span { start: Position { line: 528, column: 34, }, end: Position { line: 528, column: 48, }, }, }, ), ], default: None, }, ), operator: LogicalOr, right: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "cfg", span: Span { start: Position { line: 529, column: 18, }, end: Position { line: 529, column: 21, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "pamMount", span: Span { start: Position { line: 529, column: 22, }, end: Position { line: 529, column: 30, }, }, }, ), ], default: None, }, ), }, ), operator: LogicalOr, right: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "cfg", span: Span { start: Position { line: 530, column: 18, }, end: Position { line: 530, column: 21, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "enableKwallet", span: Span { start: Position { line: 530, column: 22, }, end: Position { line: 530, column: 35, }, }, }, ), ], default: None, }, ), }, ), operator: LogicalOr, right: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "cfg", span: Span { start: Position { line: 531, column: 18, }, end: Position { line: 531, column: 21, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "enableGnomeKeyring", span: Span { start: Position { line: 531, column: 22, }, end: Position { line: 531, column: 40, }, }, }, ), ], default: None, }, ), }, ), operator: LogicalOr, right: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "cfg", span: Span { start: Position { line: 532, column: 18, }, end: Position { line: 532, column: 21, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "googleAuthenticator", span: Span { start: Position { line: 532, column: 22, }, end: Position { line: 532, column: 41, }, }, }, ), Raw( PartRaw { content: "enable", span: Span { start: Position { line: 532, column: 42, }, end: Position { line: 532, column: 48, }, }, }, ), ], default: None, }, ), }, ), operator: LogicalOr, right: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "cfg", span: Span { start: Position { line: 533, column: 18, }, end: Position { line: 533, column: 21, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "gnupg", span: Span { start: Position { line: 533, column: 22, }, end: Position { line: 533, column: 27, }, }, }, ), Raw( PartRaw { content: "enable", span: Span { start: Position { line: 533, column: 28, }, end: Position { line: 533, column: 34, }, }, }, ), ], default: None, }, ), }, ), operator: LogicalOr, right: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "cfg", span: Span { start: Position { line: 534, column: 18, }, end: Position { line: 534, column: 21, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "duoSecurity", span: Span { start: Position { line: 534, column: 22, }, end: Position { line: 534, column: 33, }, }, }, ), Raw( PartRaw { content: "enable", span: Span { start: Position { line: 534, column: 34, }, end: Position { line: 534, column: 40, }, }, }, ), ], default: None, }, ), }, ), }, ), BinaryOperation( BinaryOperation { left: BinaryOperation( BinaryOperation { left: BinaryOperation( BinaryOperation { left: BinaryOperation( BinaryOperation { left: BinaryOperation( BinaryOperation { left: BinaryOperation( BinaryOperation { left: BinaryOperation( BinaryOperation { left: IndentedString( IndentedString { parts: [ Raw( PartRaw { content: "auth optional pam_unix.so ", span: Span { start: Position { line: 537, column: 1, }, end: Position { line: 537, column: 43, }, }, }, ), Interpolation( PartInterpolation { expression: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "optionalString", span: Span { start: Position { line: 537, column: 45, }, end: Position { line: 537, column: 59, }, }, }, ), arguments: [ PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "cfg", span: Span { start: Position { line: 537, column: 60, }, end: Position { line: 537, column: 63, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "allowNullPassword", span: Span { start: Position { line: 537, column: 64, }, end: Position { line: 537, column: 81, }, }, }, ), ], default: None, }, ), String( String_ { parts: [ Raw( PartRaw { content: "nullok", span: Span { start: Position { line: 537, column: 83, }, end: Position { line: 537, column: 89, }, }, }, ), ], span: Span { start: Position { line: 537, column: 82, }, end: Position { line: 537, column: 90, }, }, }, ), ], }, ), }, ), Raw( PartRaw { content: " ", span: Span { start: Position { line: 537, column: 1, }, end: Position { line: 537, column: 92, }, }, }, ), Interpolation( PartInterpolation { expression: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "optionalString", span: Span { start: Position { line: 537, column: 94, }, end: Position { line: 537, column: 108, }, }, }, ), arguments: [ PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "cfg", span: Span { start: Position { line: 537, column: 109, }, end: Position { line: 537, column: 112, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "nodelay", span: Span { start: Position { line: 537, column: 113, }, end: Position { line: 537, column: 120, }, }, }, ), ], default: None, }, ), String( String_ { parts: [ Raw( PartRaw { content: "nodelay", span: Span { start: Position { line: 537, column: 122, }, end: Position { line: 537, column: 129, }, }, }, ), ], span: Span { start: Position { line: 537, column: 121, }, end: Position { line: 537, column: 130, }, }, }, ), ], }, ), }, ), Raw( PartRaw { content: " likeauth\n", span: Span { start: Position { line: 537, column: 1, }, end: Position { line: 538, column: 15, }, }, }, ), ], span: Span { start: Position { line: 536, column: 15, }, end: Position { line: 538, column: 17, }, }, }, ), operator: Addition, right: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "optionalString", span: Span { start: Position { line: 539, column: 15, }, end: Position { line: 539, column: 29, }, }, }, ), arguments: [ PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "config", span: Span { start: Position { line: 539, column: 30, }, end: Position { line: 539, column: 36, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "security", span: Span { start: Position { line: 539, column: 37, }, end: Position { line: 539, column: 45, }, }, }, ), Raw( PartRaw { content: "pam", span: Span { start: Position { line: 539, column: 46, }, end: Position { line: 539, column: 49, }, }, }, ), Raw( PartRaw { content: "enableEcryptfs", span: Span { start: Position { line: 539, column: 50, }, end: Position { line: 539, column: 64, }, }, }, ), ], default: None, }, ), IndentedString( IndentedString { parts: [ Raw( PartRaw { content: "auth optional ", span: Span { start: Position { line: 540, column: 1, }, end: Position { line: 540, column: 31, }, }, }, ), Interpolation( PartInterpolation { expression: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "pkgs", span: Span { start: Position { line: 540, column: 33, }, end: Position { line: 540, column: 37, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "ecryptfs", span: Span { start: Position { line: 540, column: 38, }, end: Position { line: 540, column: 46, }, }, }, ), ], default: None, }, ), }, ), Raw( PartRaw { content: "/lib/security/pam_ecryptfs.so unwrap\n", span: Span { start: Position { line: 540, column: 1, }, end: Position { line: 541, column: 15, }, }, }, ), ], span: Span { start: Position { line: 539, column: 65, }, end: Position { line: 541, column: 17, }, }, }, ), ], }, ), }, ), operator: Addition, right: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "optionalString", span: Span { start: Position { line: 542, column: 15, }, end: Position { line: 542, column: 29, }, }, }, ), arguments: [ PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "cfg", span: Span { start: Position { line: 542, column: 30, }, end: Position { line: 542, column: 33, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "pamMount", span: Span { start: Position { line: 542, column: 34, }, end: Position { line: 542, column: 42, }, }, }, ), ], default: None, }, ), IndentedString( IndentedString { parts: [ Raw( PartRaw { content: "auth optional ", span: Span { start: Position { line: 543, column: 1, }, end: Position { line: 543, column: 31, }, }, }, ), Interpolation( PartInterpolation { expression: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "pkgs", span: Span { start: Position { line: 543, column: 33, }, end: Position { line: 543, column: 37, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "pam_mount", span: Span { start: Position { line: 543, column: 38, }, end: Position { line: 543, column: 47, }, }, }, ), ], default: None, }, ), }, ), Raw( PartRaw { content: "/lib/security/pam_mount.so disable_interactive\n", span: Span { start: Position { line: 543, column: 1, }, end: Position { line: 544, column: 15, }, }, }, ), ], span: Span { start: Position { line: 542, column: 43, }, end: Position { line: 544, column: 17, }, }, }, ), ], }, ), }, ), operator: Addition, right: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "optionalString", span: Span { start: Position { line: 545, column: 15, }, end: Position { line: 545, column: 29, }, }, }, ), arguments: [ PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "cfg", span: Span { start: Position { line: 545, column: 30, }, end: Position { line: 545, column: 33, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "enableKwallet", span: Span { start: Position { line: 545, column: 34, }, end: Position { line: 545, column: 47, }, }, }, ), ], default: None, }, ), IndentedString( IndentedString { parts: [ Raw( PartRaw { content: "auth optional ", span: Span { start: Position { line: 546, column: 1, }, end: Position { line: 546, column: 30, }, }, }, ), Interpolation( PartInterpolation { expression: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "pkgs", span: Span { start: Position { line: 546, column: 32, }, end: Position { line: 546, column: 36, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "plasma5Packages", span: Span { start: Position { line: 546, column: 37, }, end: Position { line: 546, column: 52, }, }, }, ), Raw( PartRaw { content: "kwallet-pam", span: Span { start: Position { line: 546, column: 53, }, end: Position { line: 546, column: 64, }, }, }, ), ], default: None, }, ), }, ), Raw( PartRaw { content: "/lib/security/pam_kwallet5.so kwalletd=", span: Span { start: Position { line: 546, column: 1, }, end: Position { line: 546, column: 104, }, }, }, ), Interpolation( PartInterpolation { expression: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "pkgs", span: Span { start: Position { line: 546, column: 106, }, end: Position { line: 546, column: 110, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "plasma5Packages", span: Span { start: Position { line: 546, column: 111, }, end: Position { line: 546, column: 126, }, }, }, ), Raw( PartRaw { content: "kwallet", span: Span { start: Position { line: 546, column: 127, }, end: Position { line: 546, column: 134, }, }, }, ), Raw( PartRaw { content: "bin", span: Span { start: Position { line: 546, column: 135, }, end: Position { line: 546, column: 138, }, }, }, ), ], default: None, }, ), }, ), Raw( PartRaw { content: "/bin/kwalletd5\n", span: Span { start: Position { line: 546, column: 1, }, end: Position { line: 547, column: 15, }, }, }, ), ], span: Span { start: Position { line: 545, column: 48, }, end: Position { line: 547, column: 17, }, }, }, ), ], }, ), }, ), operator: Addition, right: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "optionalString", span: Span { start: Position { line: 548, column: 15, }, end: Position { line: 548, column: 29, }, }, }, ), arguments: [ PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "cfg", span: Span { start: Position { line: 548, column: 30, }, end: Position { line: 548, column: 33, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "enableGnomeKeyring", span: Span { start: Position { line: 548, column: 34, }, end: Position { line: 548, column: 52, }, }, }, ), ], default: None, }, ), IndentedString( IndentedString { parts: [ Raw( PartRaw { content: "auth optional ", span: Span { start: Position { line: 549, column: 1, }, end: Position { line: 549, column: 31, }, }, }, ), Interpolation( PartInterpolation { expression: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "pkgs", span: Span { start: Position { line: 549, column: 33, }, end: Position { line: 549, column: 37, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "gnome", span: Span { start: Position { line: 549, column: 38, }, end: Position { line: 549, column: 43, }, }, }, ), Raw( PartRaw { content: "gnome-keyring", span: Span { start: Position { line: 549, column: 44, }, end: Position { line: 549, column: 57, }, }, }, ), ], default: None, }, ), }, ), Raw( PartRaw { content: "/lib/security/pam_gnome_keyring.so\n", span: Span { start: Position { line: 549, column: 1, }, end: Position { line: 550, column: 15, }, }, }, ), ], span: Span { start: Position { line: 548, column: 53, }, end: Position { line: 550, column: 17, }, }, }, ), ], }, ), }, ), operator: Addition, right: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "optionalString", span: Span { start: Position { line: 551, column: 15, }, end: Position { line: 551, column: 29, }, }, }, ), arguments: [ PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "cfg", span: Span { start: Position { line: 551, column: 30, }, end: Position { line: 551, column: 33, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "gnupg", span: Span { start: Position { line: 551, column: 34, }, end: Position { line: 551, column: 39, }, }, }, ), Raw( PartRaw { content: "enable", span: Span { start: Position { line: 551, column: 40, }, end: Position { line: 551, column: 46, }, }, }, ), ], default: None, }, ), IndentedString( IndentedString { parts: [ Raw( PartRaw { content: "auth optional ", span: Span { start: Position { line: 552, column: 1, }, end: Position { line: 552, column: 31, }, }, }, ), Interpolation( PartInterpolation { expression: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "pkgs", span: Span { start: Position { line: 552, column: 33, }, end: Position { line: 552, column: 37, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "pam_gnupg", span: Span { start: Position { line: 552, column: 38, }, end: Position { line: 552, column: 47, }, }, }, ), ], default: None, }, ), }, ), Raw( PartRaw { content: "/lib/security/pam_gnupg.so ", span: Span { start: Position { line: 552, column: 1, }, end: Position { line: 552, column: 75, }, }, }, ), Interpolation( PartInterpolation { expression: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "optionalString", span: Span { start: Position { line: 552, column: 77, }, end: Position { line: 552, column: 91, }, }, }, ), arguments: [ PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "cfg", span: Span { start: Position { line: 552, column: 92, }, end: Position { line: 552, column: 95, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "gnupg", span: Span { start: Position { line: 552, column: 96, }, end: Position { line: 552, column: 101, }, }, }, ), Raw( PartRaw { content: "storeOnly", span: Span { start: Position { line: 552, column: 102, }, end: Position { line: 552, column: 111, }, }, }, ), ], default: None, }, ), String( String_ { parts: [ Raw( PartRaw { content: " store-only", span: Span { start: Position { line: 552, column: 113, }, end: Position { line: 552, column: 124, }, }, }, ), ], span: Span { start: Position { line: 552, column: 112, }, end: Position { line: 552, column: 125, }, }, }, ), ], }, ), }, ), Raw( PartRaw { content: "\n", span: Span { start: Position { line: 552, column: 1, }, end: Position { line: 553, column: 15, }, }, }, ), ], span: Span { start: Position { line: 551, column: 47, }, end: Position { line: 553, column: 17, }, }, }, ), ], }, ), }, ), operator: Addition, right: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "optionalString", span: Span { start: Position { line: 554, column: 15, }, end: Position { line: 554, column: 29, }, }, }, ), arguments: [ PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "cfg", span: Span { start: Position { line: 554, column: 30, }, end: Position { line: 554, column: 33, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "googleAuthenticator", span: Span { start: Position { line: 554, column: 34, }, end: Position { line: 554, column: 53, }, }, }, ), Raw( PartRaw { content: "enable", span: Span { start: Position { line: 554, column: 54, }, end: Position { line: 554, column: 60, }, }, }, ), ], default: None, }, ), IndentedString( IndentedString { parts: [ Raw( PartRaw { content: "auth required ", span: Span { start: Position { line: 555, column: 1, }, end: Position { line: 555, column: 31, }, }, }, ), Interpolation( PartInterpolation { expression: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "pkgs", span: Span { start: Position { line: 555, column: 33, }, end: Position { line: 555, column: 37, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "google-authenticator", span: Span { start: Position { line: 555, column: 38, }, end: Position { line: 555, column: 58, }, }, }, ), ], default: None, }, ), }, ), Raw( PartRaw { content: "/lib/security/pam_google_authenticator.so no_increment_hotp\n", span: Span { start: Position { line: 555, column: 1, }, end: Position { line: 556, column: 15, }, }, }, ), ], span: Span { start: Position { line: 554, column: 61, }, end: Position { line: 556, column: 17, }, }, }, ), ], }, ), }, ), operator: Addition, right: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "optionalString", span: Span { start: Position { line: 557, column: 15, }, end: Position { line: 557, column: 29, }, }, }, ), arguments: [ PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "cfg", span: Span { start: Position { line: 557, column: 30, }, end: Position { line: 557, column: 33, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "duoSecurity", span: Span { start: Position { line: 557, column: 34, }, end: Position { line: 557, column: 45, }, }, }, ), Raw( PartRaw { content: "enable", span: Span { start: Position { line: 557, column: 46, }, end: Position { line: 557, column: 52, }, }, }, ), ], default: None, }, ), IndentedString( IndentedString { parts: [ Raw( PartRaw { content: "auth required ", span: Span { start: Position { line: 558, column: 1, }, end: Position { line: 558, column: 31, }, }, }, ), Interpolation( PartInterpolation { expression: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "pkgs", span: Span { start: Position { line: 558, column: 33, }, end: Position { line: 558, column: 37, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "duo-unix", span: Span { start: Position { line: 558, column: 38, }, end: Position { line: 558, column: 46, }, }, }, ), ], default: None, }, ), }, ), Raw( PartRaw { content: "/lib/security/pam_duo.so\n", span: Span { start: Position { line: 558, column: 1, }, end: Position { line: 559, column: 15, }, }, }, ), ], span: Span { start: Position { line: 557, column: 53, }, end: Position { line: 559, column: 17, }, }, }, ), ], }, ), }, ), ], }, ), }, ), operator: Addition, right: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "optionalString", span: Span { start: Position { line: 561, column: 11, }, end: Position { line: 561, column: 25, }, }, }, ), arguments: [ PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "cfg", span: Span { start: Position { line: 561, column: 26, }, end: Position { line: 561, column: 29, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "unixAuth", span: Span { start: Position { line: 561, column: 30, }, end: Position { line: 561, column: 38, }, }, }, ), ], default: None, }, ), IndentedString( IndentedString { parts: [ Raw( PartRaw { content: "auth sufficient pam_unix.so ", span: Span { start: Position { line: 562, column: 1, }, end: Position { line: 562, column: 41, }, }, }, ), Interpolation( PartInterpolation { expression: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "optionalString", span: Span { start: Position { line: 562, column: 43, }, end: Position { line: 562, column: 57, }, }, }, ), arguments: [ PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "cfg", span: Span { start: Position { line: 562, column: 58, }, end: Position { line: 562, column: 61, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "allowNullPassword", span: Span { start: Position { line: 562, column: 62, }, end: Position { line: 562, column: 79, }, }, }, ), ], default: None, }, ), String( String_ { parts: [ Raw( PartRaw { content: "nullok", span: Span { start: Position { line: 562, column: 81, }, end: Position { line: 562, column: 87, }, }, }, ), ], span: Span { start: Position { line: 562, column: 80, }, end: Position { line: 562, column: 88, }, }, }, ), ], }, ), }, ), Raw( PartRaw { content: " ", span: Span { start: Position { line: 562, column: 1, }, end: Position { line: 562, column: 90, }, }, }, ), Interpolation( PartInterpolation { expression: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "optionalString", span: Span { start: Position { line: 562, column: 92, }, end: Position { line: 562, column: 106, }, }, }, ), arguments: [ PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "cfg", span: Span { start: Position { line: 562, column: 107, }, end: Position { line: 562, column: 110, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "nodelay", span: Span { start: Position { line: 562, column: 111, }, end: Position { line: 562, column: 118, }, }, }, ), ], default: None, }, ), String( String_ { parts: [ Raw( PartRaw { content: "nodelay", span: Span { start: Position { line: 562, column: 120, }, end: Position { line: 562, column: 127, }, }, }, ), ], span: Span { start: Position { line: 562, column: 119, }, end: Position { line: 562, column: 128, }, }, }, ), ], }, ), }, ), Raw( PartRaw { content: " likeauth try_first_pass\n", span: Span { start: Position { line: 562, column: 1, }, end: Position { line: 563, column: 11, }, }, }, ), ], span: Span { start: Position { line: 561, column: 39, }, end: Position { line: 563, column: 13, }, }, }, ), ], }, ), }, ), operator: Addition, right: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "optionalString", span: Span { start: Position { line: 564, column: 11, }, end: Position { line: 564, column: 25, }, }, }, ), arguments: [ PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "cfg", span: Span { start: Position { line: 564, column: 26, }, end: Position { line: 564, column: 29, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "otpwAuth", span: Span { start: Position { line: 564, column: 30, }, end: Position { line: 564, column: 38, }, }, }, ), ], default: None, }, ), IndentedString( IndentedString { parts: [ Raw( PartRaw { content: "auth sufficient ", span: Span { start: Position { line: 565, column: 1, }, end: Position { line: 565, column: 29, }, }, }, ), Interpolation( PartInterpolation { expression: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "pkgs", span: Span { start: Position { line: 565, column: 31, }, end: Position { line: 565, column: 35, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "otpw", span: Span { start: Position { line: 565, column: 36, }, end: Position { line: 565, column: 40, }, }, }, ), ], default: None, }, ), }, ), Raw( PartRaw { content: "/lib/security/pam_otpw.so\n", span: Span { start: Position { line: 565, column: 1, }, end: Position { line: 566, column: 11, }, }, }, ), ], span: Span { start: Position { line: 564, column: 39, }, end: Position { line: 566, column: 13, }, }, }, ), ], }, ), }, ), operator: Addition, right: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "optionalString", span: Span { start: Position { line: 567, column: 11, }, end: Position { line: 567, column: 25, }, }, }, ), arguments: [ Identifier( Identifier { id: "use_ldap", span: Span { start: Position { line: 567, column: 26, }, end: Position { line: 567, column: 34, }, }, }, ), IndentedString( IndentedString { parts: [ Raw( PartRaw { content: "auth sufficient ", span: Span { start: Position { line: 568, column: 1, }, end: Position { line: 568, column: 29, }, }, }, ), Interpolation( PartInterpolation { expression: Identifier( Identifier { id: "pam_ldap", span: Span { start: Position { line: 568, column: 31, }, end: Position { line: 568, column: 39, }, }, }, ), }, ), Raw( PartRaw { content: "/lib/security/pam_ldap.so use_first_pass\n", span: Span { start: Position { line: 568, column: 1, }, end: Position { line: 569, column: 11, }, }, }, ), ], span: Span { start: Position { line: 567, column: 35, }, end: Position { line: 569, column: 13, }, }, }, ), ], }, ), }, ), operator: Addition, right: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "optionalString", span: Span { start: Position { line: 570, column: 11, }, end: Position { line: 570, column: 25, }, }, }, ), arguments: [ PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "config", span: Span { start: Position { line: 570, column: 26, }, end: Position { line: 570, column: 32, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "services", span: Span { start: Position { line: 570, column: 33, }, end: Position { line: 570, column: 41, }, }, }, ), Raw( PartRaw { content: "sssd", span: Span { start: Position { line: 570, column: 42, }, end: Position { line: 570, column: 46, }, }, }, ), Raw( PartRaw { content: "enable", span: Span { start: Position { line: 570, column: 47, }, end: Position { line: 570, column: 53, }, }, }, ), ], default: None, }, ), IndentedString( IndentedString { parts: [ Raw( PartRaw { content: "auth sufficient ", span: Span { start: Position { line: 571, column: 1, }, end: Position { line: 571, column: 29, }, }, }, ), Interpolation( PartInterpolation { expression: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "pkgs", span: Span { start: Position { line: 571, column: 31, }, end: Position { line: 571, column: 35, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "sssd", span: Span { start: Position { line: 571, column: 36, }, end: Position { line: 571, column: 40, }, }, }, ), ], default: None, }, ), }, ), Raw( PartRaw { content: "/lib/security/pam_sss.so use_first_pass\n", span: Span { start: Position { line: 571, column: 1, }, end: Position { line: 572, column: 11, }, }, }, ), ], span: Span { start: Position { line: 570, column: 54, }, end: Position { line: 572, column: 13, }, }, }, ), ], }, ), }, ), operator: Addition, right: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "optionalString", span: Span { start: Position { line: 573, column: 11, }, end: Position { line: 573, column: 25, }, }, }, ), arguments: [ PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "config", span: Span { start: Position { line: 573, column: 26, }, end: Position { line: 573, column: 32, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "security", span: Span { start: Position { line: 573, column: 33, }, end: Position { line: 573, column: 41, }, }, }, ), Raw( PartRaw { content: "pam", span: Span { start: Position { line: 573, column: 42, }, end: Position { line: 573, column: 45, }, }, }, ), Raw( PartRaw { content: "krb5", span: Span { start: Position { line: 573, column: 46, }, end: Position { line: 573, column: 50, }, }, }, ), Raw( PartRaw { content: "enable", span: Span { start: Position { line: 573, column: 51, }, end: Position { line: 573, column: 57, }, }, }, ), ], default: None, }, ), IndentedString( IndentedString { parts: [ Raw( PartRaw { content: "auth [default=ignore success=1 service_err=reset] ", span: Span { start: Position { line: 574, column: 1, }, end: Position { line: 574, column: 63, }, }, }, ), Interpolation( PartInterpolation { expression: Identifier( Identifier { id: "pam_krb5", span: Span { start: Position { line: 574, column: 65, }, end: Position { line: 574, column: 73, }, }, }, ), }, ), Raw( PartRaw { content: "/lib/security/pam_krb5.so use_first_pass\nauth [default=die success=done] ", span: Span { start: Position { line: 574, column: 1, }, end: Position { line: 575, column: 45, }, }, }, ), Interpolation( PartInterpolation { expression: Identifier( Identifier { id: "pam_ccreds", span: Span { start: Position { line: 575, column: 47, }, end: Position { line: 575, column: 57, }, }, }, ), }, ), Raw( PartRaw { content: "/lib/security/pam_ccreds.so action=validate use_first_pass\nauth sufficient ", span: Span { start: Position { line: 574, column: 1, }, end: Position { line: 576, column: 29, }, }, }, ), Interpolation( PartInterpolation { expression: Identifier( Identifier { id: "pam_ccreds", span: Span { start: Position { line: 576, column: 31, }, end: Position { line: 576, column: 41, }, }, }, ), }, ), Raw( PartRaw { content: "/lib/security/pam_ccreds.so action=store use_first_pass\n", span: Span { start: Position { line: 574, column: 1, }, end: Position { line: 577, column: 11, }, }, }, ), ], span: Span { start: Position { line: 573, column: 58, }, end: Position { line: 577, column: 13, }, }, }, ), ], }, ), }, ), operator: Addition, right: IndentedString( IndentedString { parts: [ Raw( PartRaw { content: "auth required pam_deny.so\n\n# Password management.\npassword sufficient pam_unix.so nullok sha512\n", span: Span { start: Position { line: 579, column: 1, }, end: Position { line: 583, column: 11, }, }, }, ), ], span: Span { start: Position { line: 578, column: 11, }, end: Position { line: 583, column: 13, }, }, }, ), }, ), operator: Addition, right: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "optionalString", span: Span { start: Position { line: 584, column: 11, }, end: Position { line: 584, column: 25, }, }, }, ), arguments: [ PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "config", span: Span { start: Position { line: 584, column: 26, }, end: Position { line: 584, column: 32, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "security", span: Span { start: Position { line: 584, column: 33, }, end: Position { line: 584, column: 41, }, }, }, ), Raw( PartRaw { content: "pam", span: Span { start: Position { line: 584, column: 42, }, end: Position { line: 584, column: 45, }, }, }, ), Raw( PartRaw { content: "enableEcryptfs", span: Span { start: Position { line: 584, column: 46, }, end: Position { line: 584, column: 60, }, }, }, ), ], default: None, }, ), IndentedString( IndentedString { parts: [ Raw( PartRaw { content: "password optional ", span: Span { start: Position { line: 585, column: 1, }, end: Position { line: 585, column: 31, }, }, }, ), Interpolation( PartInterpolation { expression: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "pkgs", span: Span { start: Position { line: 585, column: 33, }, end: Position { line: 585, column: 37, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "ecryptfs", span: Span { start: Position { line: 585, column: 38, }, end: Position { line: 585, column: 46, }, }, }, ), ], default: None, }, ), }, ), Raw( PartRaw { content: "/lib/security/pam_ecryptfs.so\n", span: Span { start: Position { line: 585, column: 1, }, end: Position { line: 586, column: 11, }, }, }, ), ], span: Span { start: Position { line: 584, column: 61, }, end: Position { line: 586, column: 13, }, }, }, ), ], }, ), }, ), operator: Addition, right: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "optionalString", span: Span { start: Position { line: 587, column: 11, }, end: Position { line: 587, column: 25, }, }, }, ), arguments: [ PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "cfg", span: Span { start: Position { line: 587, column: 26, }, end: Position { line: 587, column: 29, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "pamMount", span: Span { start: Position { line: 587, column: 30, }, end: Position { line: 587, column: 38, }, }, }, ), ], default: None, }, ), IndentedString( IndentedString { parts: [ Raw( PartRaw { content: "password optional ", span: Span { start: Position { line: 588, column: 1, }, end: Position { line: 588, column: 31, }, }, }, ), Interpolation( PartInterpolation { expression: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "pkgs", span: Span { start: Position { line: 588, column: 33, }, end: Position { line: 588, column: 37, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "pam_mount", span: Span { start: Position { line: 588, column: 38, }, end: Position { line: 588, column: 47, }, }, }, ), ], default: None, }, ), }, ), Raw( PartRaw { content: "/lib/security/pam_mount.so\n", span: Span { start: Position { line: 588, column: 1, }, end: Position { line: 589, column: 11, }, }, }, ), ], span: Span { start: Position { line: 587, column: 39, }, end: Position { line: 589, column: 13, }, }, }, ), ], }, ), }, ), operator: Addition, right: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "optionalString", span: Span { start: Position { line: 590, column: 11, }, end: Position { line: 590, column: 25, }, }, }, ), arguments: [ Identifier( Identifier { id: "use_ldap", span: Span { start: Position { line: 590, column: 26, }, end: Position { line: 590, column: 34, }, }, }, ), IndentedString( IndentedString { parts: [ Raw( PartRaw { content: "password sufficient ", span: Span { start: Position { line: 591, column: 1, }, end: Position { line: 591, column: 33, }, }, }, ), Interpolation( PartInterpolation { expression: Identifier( Identifier { id: "pam_ldap", span: Span { start: Position { line: 591, column: 35, }, end: Position { line: 591, column: 43, }, }, }, ), }, ), Raw( PartRaw { content: "/lib/security/pam_ldap.so\n", span: Span { start: Position { line: 591, column: 1, }, end: Position { line: 592, column: 11, }, }, }, ), ], span: Span { start: Position { line: 590, column: 35, }, end: Position { line: 592, column: 13, }, }, }, ), ], }, ), }, ), operator: Addition, right: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "optionalString", span: Span { start: Position { line: 593, column: 11, }, end: Position { line: 593, column: 25, }, }, }, ), arguments: [ PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "cfg", span: Span { start: Position { line: 593, column: 26, }, end: Position { line: 593, column: 29, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "mysqlAuth", span: Span { start: Position { line: 593, column: 30, }, end: Position { line: 593, column: 39, }, }, }, ), ], default: None, }, ), IndentedString( IndentedString { parts: [ Raw( PartRaw { content: "password sufficient ", span: Span { start: Position { line: 594, column: 1, }, end: Position { line: 594, column: 33, }, }, }, ), Interpolation( PartInterpolation { expression: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "pkgs", span: Span { start: Position { line: 594, column: 35, }, end: Position { line: 594, column: 39, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "pam_mysql", span: Span { start: Position { line: 594, column: 40, }, end: Position { line: 594, column: 49, }, }, }, ), ], default: None, }, ), }, ), Raw( PartRaw { content: "/lib/security/pam_mysql.so config_file=/etc/security/pam_mysql.conf\n", span: Span { start: Position { line: 594, column: 1, }, end: Position { line: 595, column: 11, }, }, }, ), ], span: Span { start: Position { line: 593, column: 40, }, end: Position { line: 595, column: 13, }, }, }, ), ], }, ), }, ), operator: Addition, right: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "optionalString", span: Span { start: Position { line: 596, column: 11, }, end: Position { line: 596, column: 25, }, }, }, ), arguments: [ PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "config", span: Span { start: Position { line: 596, column: 26, }, end: Position { line: 596, column: 32, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "services", span: Span { start: Position { line: 596, column: 33, }, end: Position { line: 596, column: 41, }, }, }, ), Raw( PartRaw { content: "sssd", span: Span { start: Position { line: 596, column: 42, }, end: Position { line: 596, column: 46, }, }, }, ), Raw( PartRaw { content: "enable", span: Span { start: Position { line: 596, column: 47, }, end: Position { line: 596, column: 53, }, }, }, ), ], default: None, }, ), IndentedString( IndentedString { parts: [ Raw( PartRaw { content: "password sufficient ", span: Span { start: Position { line: 597, column: 1, }, end: Position { line: 597, column: 33, }, }, }, ), Interpolation( PartInterpolation { expression: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "pkgs", span: Span { start: Position { line: 597, column: 35, }, end: Position { line: 597, column: 39, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "sssd", span: Span { start: Position { line: 597, column: 40, }, end: Position { line: 597, column: 44, }, }, }, ), ], default: None, }, ), }, ), Raw( PartRaw { content: "/lib/security/pam_sss.so use_authtok\n", span: Span { start: Position { line: 597, column: 1, }, end: Position { line: 598, column: 11, }, }, }, ), ], span: Span { start: Position { line: 596, column: 54, }, end: Position { line: 598, column: 13, }, }, }, ), ], }, ), }, ), operator: Addition, right: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "optionalString", span: Span { start: Position { line: 599, column: 11, }, end: Position { line: 599, column: 25, }, }, }, ), arguments: [ PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "config", span: Span { start: Position { line: 599, column: 26, }, end: Position { line: 599, column: 32, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "security", span: Span { start: Position { line: 599, column: 33, }, end: Position { line: 599, column: 41, }, }, }, ), Raw( PartRaw { content: "pam", span: Span { start: Position { line: 599, column: 42, }, end: Position { line: 599, column: 45, }, }, }, ), Raw( PartRaw { content: "krb5", span: Span { start: Position { line: 599, column: 46, }, end: Position { line: 599, column: 50, }, }, }, ), Raw( PartRaw { content: "enable", span: Span { start: Position { line: 599, column: 51, }, end: Position { line: 599, column: 57, }, }, }, ), ], default: None, }, ), IndentedString( IndentedString { parts: [ Raw( PartRaw { content: "password sufficient ", span: Span { start: Position { line: 600, column: 1, }, end: Position { line: 600, column: 33, }, }, }, ), Interpolation( PartInterpolation { expression: Identifier( Identifier { id: "pam_krb5", span: Span { start: Position { line: 600, column: 35, }, end: Position { line: 600, column: 43, }, }, }, ), }, ), Raw( PartRaw { content: "/lib/security/pam_krb5.so use_first_pass\n", span: Span { start: Position { line: 600, column: 1, }, end: Position { line: 601, column: 11, }, }, }, ), ], span: Span { start: Position { line: 599, column: 58, }, end: Position { line: 601, column: 13, }, }, }, ), ], }, ), }, ), operator: Addition, right: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "optionalString", span: Span { start: Position { line: 602, column: 11, }, end: Position { line: 602, column: 25, }, }, }, ), arguments: [ PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "cfg", span: Span { start: Position { line: 602, column: 26, }, end: Position { line: 602, column: 29, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "enableGnomeKeyring", span: Span { start: Position { line: 602, column: 30, }, end: Position { line: 602, column: 48, }, }, }, ), ], default: None, }, ), IndentedString( IndentedString { parts: [ Raw( PartRaw { content: "password optional ", span: Span { start: Position { line: 603, column: 1, }, end: Position { line: 603, column: 31, }, }, }, ), Interpolation( PartInterpolation { expression: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "pkgs", span: Span { start: Position { line: 603, column: 33, }, end: Position { line: 603, column: 37, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "gnome", span: Span { start: Position { line: 603, column: 38, }, end: Position { line: 603, column: 43, }, }, }, ), Raw( PartRaw { content: "gnome-keyring", span: Span { start: Position { line: 603, column: 44, }, end: Position { line: 603, column: 57, }, }, }, ), ], default: None, }, ), }, ), Raw( PartRaw { content: "/lib/security/pam_gnome_keyring.so use_authtok\n", span: Span { start: Position { line: 603, column: 1, }, end: Position { line: 604, column: 11, }, }, }, ), ], span: Span { start: Position { line: 602, column: 49, }, end: Position { line: 604, column: 13, }, }, }, ), ], }, ), }, ), operator: Addition, right: IndentedString( IndentedString { parts: [ Raw( PartRaw { content: "\n# Session management.\n", span: Span { start: Position { line: 606, column: 1, }, end: Position { line: 608, column: 11, }, }, }, ), ], span: Span { start: Position { line: 605, column: 11, }, end: Position { line: 608, column: 13, }, }, }, ), }, ), operator: Addition, right: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "optionalString", span: Span { start: Position { line: 609, column: 11, }, end: Position { line: 609, column: 25, }, }, }, ), arguments: [ PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "cfg", span: Span { start: Position { line: 609, column: 26, }, end: Position { line: 609, column: 29, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "setEnvironment", span: Span { start: Position { line: 609, column: 30, }, end: Position { line: 609, column: 44, }, }, }, ), ], default: None, }, ), IndentedString( IndentedString { parts: [ Raw( PartRaw { content: "session required pam_env.so conffile=/etc/pam/environment readenv=0\n", span: Span { start: Position { line: 610, column: 1, }, end: Position { line: 611, column: 11, }, }, }, ), ], span: Span { start: Position { line: 609, column: 45, }, end: Position { line: 611, column: 13, }, }, }, ), ], }, ), }, ), operator: Addition, right: IndentedString( IndentedString { parts: [ Raw( PartRaw { content: "session required pam_unix.so\n", span: Span { start: Position { line: 613, column: 1, }, end: Position { line: 614, column: 11, }, }, }, ), ], span: Span { start: Position { line: 612, column: 11, }, end: Position { line: 614, column: 13, }, }, }, ), }, ), operator: Addition, right: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "optionalString", span: Span { start: Position { line: 615, column: 11, }, end: Position { line: 615, column: 25, }, }, }, ), arguments: [ PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "cfg", span: Span { start: Position { line: 615, column: 26, }, end: Position { line: 615, column: 29, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "setLoginUid", span: Span { start: Position { line: 615, column: 30, }, end: Position { line: 615, column: 41, }, }, }, ), ], default: None, }, ), IndentedString( IndentedString { parts: [ Raw( PartRaw { content: "session ", span: Span { start: Position { line: 616, column: 1, }, end: Position { line: 616, column: 21, }, }, }, ), Interpolation( PartInterpolation { expression: IfThenElse( IfThenElse { predicate: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "config", span: Span { start: Position { line: 616, column: 26, }, end: Position { line: 616, column: 32, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "boot", span: Span { start: Position { line: 616, column: 33, }, end: Position { line: 616, column: 37, }, }, }, ), Raw( PartRaw { content: "isContainer", span: Span { start: Position { line: 616, column: 38, }, end: Position { line: 616, column: 49, }, }, }, ), ], default: None, }, ), then: String( String_ { parts: [ Raw( PartRaw { content: "optional", span: Span { start: Position { line: 616, column: 56, }, end: Position { line: 616, column: 64, }, }, }, ), ], span: Span { start: Position { line: 616, column: 55, }, end: Position { line: 616, column: 65, }, }, }, ), else_: String( String_ { parts: [ Raw( PartRaw { content: "required", span: Span { start: Position { line: 616, column: 72, }, end: Position { line: 616, column: 80, }, }, }, ), ], span: Span { start: Position { line: 616, column: 71, }, end: Position { line: 616, column: 81, }, }, }, ), span: Span { start: Position { line: 616, column: 23, }, end: Position { line: 616, column: 81, }, }, }, ), }, ), Raw( PartRaw { content: " pam_loginuid.so\n", span: Span { start: Position { line: 616, column: 1, }, end: Position { line: 617, column: 11, }, }, }, ), ], span: Span { start: Position { line: 615, column: 42, }, end: Position { line: 617, column: 13, }, }, }, ), ], }, ), }, ), operator: Addition, right: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "optionalString", span: Span { start: Position { line: 618, column: 11, }, end: Position { line: 618, column: 25, }, }, }, ), arguments: [ PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "cfg", span: Span { start: Position { line: 618, column: 26, }, end: Position { line: 618, column: 29, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "ttyAudit", span: Span { start: Position { line: 618, column: 30, }, end: Position { line: 618, column: 38, }, }, }, ), Raw( PartRaw { content: "enable", span: Span { start: Position { line: 618, column: 39, }, end: Position { line: 618, column: 45, }, }, }, ), ], default: None, }, ), FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "concatStringsSep", span: Span { start: Position { line: 618, column: 47, }, end: Position { line: 618, column: 63, }, }, }, ), arguments: [ String( String_ { parts: [ Raw( PartRaw { content: " \\\n ", span: Span { start: Position { line: 618, column: 65, }, end: Position { line: 618, column: 72, }, }, }, ), ], span: Span { start: Position { line: 618, column: 64, }, end: Position { line: 618, column: 73, }, }, }, ), BinaryOperation( BinaryOperation { left: List( List { elements: [ String( String_ { parts: [ Raw( PartRaw { content: "session required ", span: Span { start: Position { line: 619, column: 14, }, end: Position { line: 619, column: 42, }, }, }, ), Interpolation( PartInterpolation { expression: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "pkgs", span: Span { start: Position { line: 619, column: 33, }, end: Position { line: 619, column: 37, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "pam", span: Span { start: Position { line: 619, column: 38, }, end: Position { line: 619, column: 41, }, }, }, ), ], default: None, }, ), }, ), Raw( PartRaw { content: "/lib/security/pam_tty_audit.so", span: Span { start: Position { line: 619, column: 14, }, end: Position { line: 619, column: 72, }, }, }, ), ], span: Span { start: Position { line: 619, column: 13, }, end: Position { line: 619, column: 73, }, }, }, ), ], span: Span { start: Position { line: 618, column: 75, }, end: Position { line: 620, column: 12, }, }, }, ), operator: Concatenation, right: BinaryOperation( BinaryOperation { left: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "optional", span: Span { start: Position { line: 620, column: 16, }, end: Position { line: 620, column: 24, }, }, }, ), arguments: [ PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "cfg", span: Span { start: Position { line: 620, column: 25, }, end: Position { line: 620, column: 28, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "ttyAudit", span: Span { start: Position { line: 620, column: 29, }, end: Position { line: 620, column: 37, }, }, }, ), Raw( PartRaw { content: "openOnly", span: Span { start: Position { line: 620, column: 38, }, end: Position { line: 620, column: 46, }, }, }, ), ], default: None, }, ), String( String_ { parts: [ Raw( PartRaw { content: "open_only", span: Span { start: Position { line: 620, column: 48, }, end: Position { line: 620, column: 57, }, }, }, ), ], span: Span { start: Position { line: 620, column: 47, }, end: Position { line: 620, column: 58, }, }, }, ), ], }, ), operator: Concatenation, right: BinaryOperation( BinaryOperation { left: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "optional", span: Span { start: Position { line: 621, column: 14, }, end: Position { line: 621, column: 22, }, }, }, ), arguments: [ BinaryOperation( BinaryOperation { left: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "cfg", span: Span { start: Position { line: 621, column: 24, }, end: Position { line: 621, column: 27, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "ttyAudit", span: Span { start: Position { line: 621, column: 28, }, end: Position { line: 621, column: 36, }, }, }, ), Raw( PartRaw { content: "enablePattern", span: Span { start: Position { line: 621, column: 37, }, end: Position { line: 621, column: 50, }, }, }, ), ], default: None, }, ), operator: NotEqualTo, right: Identifier( Identifier { id: "null", span: Span { start: Position { line: 621, column: 54, }, end: Position { line: 621, column: 58, }, }, }, ), }, ), String( String_ { parts: [ Raw( PartRaw { content: "enable=", span: Span { start: Position { line: 621, column: 61, }, end: Position { line: 621, column: 97, }, }, }, ), Interpolation( PartInterpolation { expression: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "cfg", span: Span { start: Position { line: 621, column: 70, }, end: Position { line: 621, column: 73, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "ttyAudit", span: Span { start: Position { line: 621, column: 74, }, end: Position { line: 621, column: 82, }, }, }, ), Raw( PartRaw { content: "enablePattern", span: Span { start: Position { line: 621, column: 83, }, end: Position { line: 621, column: 96, }, }, }, ), ], default: None, }, ), }, ), ], span: Span { start: Position { line: 621, column: 60, }, end: Position { line: 621, column: 98, }, }, }, ), ], }, ), operator: Concatenation, right: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "optional", span: Span { start: Position { line: 622, column: 14, }, end: Position { line: 622, column: 22, }, }, }, ), arguments: [ BinaryOperation( BinaryOperation { left: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "cfg", span: Span { start: Position { line: 622, column: 24, }, end: Position { line: 622, column: 27, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "ttyAudit", span: Span { start: Position { line: 622, column: 28, }, end: Position { line: 622, column: 36, }, }, }, ), Raw( PartRaw { content: "disablePattern", span: Span { start: Position { line: 622, column: 37, }, end: Position { line: 622, column: 51, }, }, }, ), ], default: None, }, ), operator: NotEqualTo, right: Identifier( Identifier { id: "null", span: Span { start: Position { line: 622, column: 55, }, end: Position { line: 622, column: 59, }, }, }, ), }, ), String( String_ { parts: [ Raw( PartRaw { content: "disable=", span: Span { start: Position { line: 622, column: 62, }, end: Position { line: 622, column: 100, }, }, }, ), Interpolation( PartInterpolation { expression: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "cfg", span: Span { start: Position { line: 622, column: 72, }, end: Position { line: 622, column: 75, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "ttyAudit", span: Span { start: Position { line: 622, column: 76, }, end: Position { line: 622, column: 84, }, }, }, ), Raw( PartRaw { content: "disablePattern", span: Span { start: Position { line: 622, column: 85, }, end: Position { line: 622, column: 99, }, }, }, ), ], default: None, }, ), }, ), ], span: Span { start: Position { line: 622, column: 61, }, end: Position { line: 622, column: 101, }, }, }, ), ], }, ), }, ), }, ), }, ), ], }, ), ], }, ), }, ), operator: Addition, right: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "optionalString", span: Span { start: Position { line: 624, column: 11, }, end: Position { line: 624, column: 25, }, }, }, ), arguments: [ PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "cfg", span: Span { start: Position { line: 624, column: 26, }, end: Position { line: 624, column: 29, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "makeHomeDir", span: Span { start: Position { line: 624, column: 30, }, end: Position { line: 624, column: 41, }, }, }, ), ], default: None, }, ), IndentedString( IndentedString { parts: [ Raw( PartRaw { content: "session required ", span: Span { start: Position { line: 625, column: 1, }, end: Position { line: 625, column: 30, }, }, }, ), Interpolation( PartInterpolation { expression: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "pkgs", span: Span { start: Position { line: 625, column: 32, }, end: Position { line: 625, column: 36, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "pam", span: Span { start: Position { line: 625, column: 37, }, end: Position { line: 625, column: 40, }, }, }, ), ], default: None, }, ), }, ), Raw( PartRaw { content: "/lib/security/pam_mkhomedir.so silent skel=", span: Span { start: Position { line: 625, column: 1, }, end: Position { line: 625, column: 84, }, }, }, ), Interpolation( PartInterpolation { expression: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "config", span: Span { start: Position { line: 625, column: 86, }, end: Position { line: 625, column: 92, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "security", span: Span { start: Position { line: 625, column: 93, }, end: Position { line: 625, column: 101, }, }, }, ), Raw( PartRaw { content: "pam", span: Span { start: Position { line: 625, column: 102, }, end: Position { line: 625, column: 105, }, }, }, ), Raw( PartRaw { content: "makeHomeDir", span: Span { start: Position { line: 625, column: 106, }, end: Position { line: 625, column: 117, }, }, }, ), Raw( PartRaw { content: "skelDirectory", span: Span { start: Position { line: 625, column: 118, }, end: Position { line: 625, column: 131, }, }, }, ), ], default: None, }, ), }, ), Raw( PartRaw { content: " umask=0077\n", span: Span { start: Position { line: 625, column: 1, }, end: Position { line: 626, column: 11, }, }, }, ), ], span: Span { start: Position { line: 624, column: 42, }, end: Position { line: 626, column: 13, }, }, }, ), ], }, ), }, ), operator: Addition, right: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "optionalString", span: Span { start: Position { line: 627, column: 11, }, end: Position { line: 627, column: 25, }, }, }, ), arguments: [ PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "cfg", span: Span { start: Position { line: 627, column: 26, }, end: Position { line: 627, column: 29, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "updateWtmp", span: Span { start: Position { line: 627, column: 30, }, end: Position { line: 627, column: 40, }, }, }, ), ], default: None, }, ), IndentedString( IndentedString { parts: [ Raw( PartRaw { content: "session required ", span: Span { start: Position { line: 628, column: 1, }, end: Position { line: 628, column: 30, }, }, }, ), Interpolation( PartInterpolation { expression: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "pkgs", span: Span { start: Position { line: 628, column: 32, }, end: Position { line: 628, column: 36, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "pam", span: Span { start: Position { line: 628, column: 37, }, end: Position { line: 628, column: 40, }, }, }, ), ], default: None, }, ), }, ), Raw( PartRaw { content: "/lib/security/pam_lastlog.so silent\n", span: Span { start: Position { line: 628, column: 1, }, end: Position { line: 629, column: 11, }, }, }, ), ], span: Span { start: Position { line: 627, column: 41, }, end: Position { line: 629, column: 13, }, }, }, ), ], }, ), }, ), operator: Addition, right: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "optionalString", span: Span { start: Position { line: 630, column: 11, }, end: Position { line: 630, column: 25, }, }, }, ), arguments: [ PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "config", span: Span { start: Position { line: 630, column: 26, }, end: Position { line: 630, column: 32, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "security", span: Span { start: Position { line: 630, column: 33, }, end: Position { line: 630, column: 41, }, }, }, ), Raw( PartRaw { content: "pam", span: Span { start: Position { line: 630, column: 42, }, end: Position { line: 630, column: 45, }, }, }, ), Raw( PartRaw { content: "enableEcryptfs", span: Span { start: Position { line: 630, column: 46, }, end: Position { line: 630, column: 60, }, }, }, ), ], default: None, }, ), IndentedString( IndentedString { parts: [ Raw( PartRaw { content: "session optional ", span: Span { start: Position { line: 631, column: 1, }, end: Position { line: 631, column: 30, }, }, }, ), Interpolation( PartInterpolation { expression: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "pkgs", span: Span { start: Position { line: 631, column: 32, }, end: Position { line: 631, column: 36, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "ecryptfs", span: Span { start: Position { line: 631, column: 37, }, end: Position { line: 631, column: 45, }, }, }, ), ], default: None, }, ), }, ), Raw( PartRaw { content: "/lib/security/pam_ecryptfs.so\n", span: Span { start: Position { line: 631, column: 1, }, end: Position { line: 632, column: 11, }, }, }, ), ], span: Span { start: Position { line: 630, column: 61, }, end: Position { line: 632, column: 13, }, }, }, ), ], }, ), }, ), operator: Addition, right: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "optionalString", span: Span { start: Position { line: 633, column: 11, }, end: Position { line: 633, column: 25, }, }, }, ), arguments: [ PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "cfg", span: Span { start: Position { line: 633, column: 26, }, end: Position { line: 633, column: 29, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "pamMount", span: Span { start: Position { line: 633, column: 30, }, end: Position { line: 633, column: 38, }, }, }, ), ], default: None, }, ), IndentedString( IndentedString { parts: [ Raw( PartRaw { content: "session optional ", span: Span { start: Position { line: 634, column: 1, }, end: Position { line: 634, column: 30, }, }, }, ), Interpolation( PartInterpolation { expression: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "pkgs", span: Span { start: Position { line: 634, column: 32, }, end: Position { line: 634, column: 36, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "pam_mount", span: Span { start: Position { line: 634, column: 37, }, end: Position { line: 634, column: 46, }, }, }, ), ], default: None, }, ), }, ), Raw( PartRaw { content: "/lib/security/pam_mount.so disable_interactive\n", span: Span { start: Position { line: 634, column: 1, }, end: Position { line: 635, column: 11, }, }, }, ), ], span: Span { start: Position { line: 633, column: 39, }, end: Position { line: 635, column: 13, }, }, }, ), ], }, ), }, ), operator: Addition, right: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "optionalString", span: Span { start: Position { line: 636, column: 11, }, end: Position { line: 636, column: 25, }, }, }, ), arguments: [ Identifier( Identifier { id: "use_ldap", span: Span { start: Position { line: 636, column: 26, }, end: Position { line: 636, column: 34, }, }, }, ), IndentedString( IndentedString { parts: [ Raw( PartRaw { content: "session optional ", span: Span { start: Position { line: 637, column: 1, }, end: Position { line: 637, column: 30, }, }, }, ), Interpolation( PartInterpolation { expression: Identifier( Identifier { id: "pam_ldap", span: Span { start: Position { line: 637, column: 32, }, end: Position { line: 637, column: 40, }, }, }, ), }, ), Raw( PartRaw { content: "/lib/security/pam_ldap.so\n", span: Span { start: Position { line: 637, column: 1, }, end: Position { line: 638, column: 11, }, }, }, ), ], span: Span { start: Position { line: 636, column: 35, }, end: Position { line: 638, column: 13, }, }, }, ), ], }, ), }, ), operator: Addition, right: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "optionalString", span: Span { start: Position { line: 639, column: 11, }, end: Position { line: 639, column: 25, }, }, }, ), arguments: [ PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "cfg", span: Span { start: Position { line: 639, column: 26, }, end: Position { line: 639, column: 29, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "mysqlAuth", span: Span { start: Position { line: 639, column: 30, }, end: Position { line: 639, column: 39, }, }, }, ), ], default: None, }, ), IndentedString( IndentedString { parts: [ Raw( PartRaw { content: "session optional ", span: Span { start: Position { line: 640, column: 1, }, end: Position { line: 640, column: 30, }, }, }, ), Interpolation( PartInterpolation { expression: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "pkgs", span: Span { start: Position { line: 640, column: 32, }, end: Position { line: 640, column: 36, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "pam_mysql", span: Span { start: Position { line: 640, column: 37, }, end: Position { line: 640, column: 46, }, }, }, ), ], default: None, }, ), }, ), Raw( PartRaw { content: "/lib/security/pam_mysql.so config_file=/etc/security/pam_mysql.conf\n", span: Span { start: Position { line: 640, column: 1, }, end: Position { line: 641, column: 11, }, }, }, ), ], span: Span { start: Position { line: 639, column: 40, }, end: Position { line: 641, column: 13, }, }, }, ), ], }, ), }, ), operator: Addition, right: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "optionalString", span: Span { start: Position { line: 642, column: 11, }, end: Position { line: 642, column: 25, }, }, }, ), arguments: [ PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "config", span: Span { start: Position { line: 642, column: 26, }, end: Position { line: 642, column: 32, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "services", span: Span { start: Position { line: 642, column: 33, }, end: Position { line: 642, column: 41, }, }, }, ), Raw( PartRaw { content: "sssd", span: Span { start: Position { line: 642, column: 42, }, end: Position { line: 642, column: 46, }, }, }, ), Raw( PartRaw { content: "enable", span: Span { start: Position { line: 642, column: 47, }, end: Position { line: 642, column: 53, }, }, }, ), ], default: None, }, ), IndentedString( IndentedString { parts: [ Raw( PartRaw { content: "session optional ", span: Span { start: Position { line: 643, column: 1, }, end: Position { line: 643, column: 30, }, }, }, ), Interpolation( PartInterpolation { expression: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "pkgs", span: Span { start: Position { line: 643, column: 32, }, end: Position { line: 643, column: 36, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "sssd", span: Span { start: Position { line: 643, column: 37, }, end: Position { line: 643, column: 41, }, }, }, ), ], default: None, }, ), }, ), Raw( PartRaw { content: "/lib/security/pam_sss.so\n", span: Span { start: Position { line: 643, column: 1, }, end: Position { line: 644, column: 11, }, }, }, ), ], span: Span { start: Position { line: 642, column: 54, }, end: Position { line: 644, column: 13, }, }, }, ), ], }, ), }, ), operator: Addition, right: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "optionalString", span: Span { start: Position { line: 645, column: 11, }, end: Position { line: 645, column: 25, }, }, }, ), arguments: [ PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "config", span: Span { start: Position { line: 645, column: 26, }, end: Position { line: 645, column: 32, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "security", span: Span { start: Position { line: 645, column: 33, }, end: Position { line: 645, column: 41, }, }, }, ), Raw( PartRaw { content: "pam", span: Span { start: Position { line: 645, column: 42, }, end: Position { line: 645, column: 45, }, }, }, ), Raw( PartRaw { content: "krb5", span: Span { start: Position { line: 645, column: 46, }, end: Position { line: 645, column: 50, }, }, }, ), Raw( PartRaw { content: "enable", span: Span { start: Position { line: 645, column: 51, }, end: Position { line: 645, column: 57, }, }, }, ), ], default: None, }, ), IndentedString( IndentedString { parts: [ Raw( PartRaw { content: "session optional ", span: Span { start: Position { line: 646, column: 1, }, end: Position { line: 646, column: 30, }, }, }, ), Interpolation( PartInterpolation { expression: Identifier( Identifier { id: "pam_krb5", span: Span { start: Position { line: 646, column: 32, }, end: Position { line: 646, column: 40, }, }, }, ), }, ), Raw( PartRaw { content: "/lib/security/pam_krb5.so\n", span: Span { start: Position { line: 646, column: 1, }, end: Position { line: 647, column: 11, }, }, }, ), ], span: Span { start: Position { line: 645, column: 58, }, end: Position { line: 647, column: 13, }, }, }, ), ], }, ), }, ), operator: Addition, right: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "optionalString", span: Span { start: Position { line: 648, column: 11, }, end: Position { line: 648, column: 25, }, }, }, ), arguments: [ PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "cfg", span: Span { start: Position { line: 648, column: 26, }, end: Position { line: 648, column: 29, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "otpwAuth", span: Span { start: Position { line: 648, column: 30, }, end: Position { line: 648, column: 38, }, }, }, ), ], default: None, }, ), IndentedString( IndentedString { parts: [ Raw( PartRaw { content: "session optional ", span: Span { start: Position { line: 649, column: 1, }, end: Position { line: 649, column: 30, }, }, }, ), Interpolation( PartInterpolation { expression: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "pkgs", span: Span { start: Position { line: 649, column: 32, }, end: Position { line: 649, column: 36, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "otpw", span: Span { start: Position { line: 649, column: 37, }, end: Position { line: 649, column: 41, }, }, }, ), ], default: None, }, ), }, ), Raw( PartRaw { content: "/lib/security/pam_otpw.so\n", span: Span { start: Position { line: 649, column: 1, }, end: Position { line: 650, column: 11, }, }, }, ), ], span: Span { start: Position { line: 648, column: 39, }, end: Position { line: 650, column: 13, }, }, }, ), ], }, ), }, ), operator: Addition, right: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "optionalString", span: Span { start: Position { line: 651, column: 11, }, end: Position { line: 651, column: 25, }, }, }, ), arguments: [ PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "cfg", span: Span { start: Position { line: 651, column: 26, }, end: Position { line: 651, column: 29, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "startSession", span: Span { start: Position { line: 651, column: 30, }, end: Position { line: 651, column: 42, }, }, }, ), ], default: None, }, ), IndentedString( IndentedString { parts: [ Raw( PartRaw { content: "session optional ", span: Span { start: Position { line: 652, column: 1, }, end: Position { line: 652, column: 30, }, }, }, ), Interpolation( PartInterpolation { expression: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "config", span: Span { start: Position { line: 652, column: 32, }, end: Position { line: 652, column: 38, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "systemd", span: Span { start: Position { line: 652, column: 39, }, end: Position { line: 652, column: 46, }, }, }, ), Raw( PartRaw { content: "package", span: Span { start: Position { line: 652, column: 47, }, end: Position { line: 652, column: 54, }, }, }, ), ], default: None, }, ), }, ), Raw( PartRaw { content: "/lib/security/pam_systemd.so\n", span: Span { start: Position { line: 652, column: 1, }, end: Position { line: 653, column: 11, }, }, }, ), ], span: Span { start: Position { line: 651, column: 43, }, end: Position { line: 653, column: 13, }, }, }, ), ], }, ), }, ), operator: Addition, right: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "optionalString", span: Span { start: Position { line: 654, column: 11, }, end: Position { line: 654, column: 25, }, }, }, ), arguments: [ PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "cfg", span: Span { start: Position { line: 654, column: 26, }, end: Position { line: 654, column: 29, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "forwardXAuth", span: Span { start: Position { line: 654, column: 30, }, end: Position { line: 654, column: 42, }, }, }, ), ], default: None, }, ), IndentedString( IndentedString { parts: [ Raw( PartRaw { content: "session optional pam_xauth.so xauthpath=", span: Span { start: Position { line: 655, column: 1, }, end: Position { line: 655, column: 53, }, }, }, ), Interpolation( PartInterpolation { expression: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "pkgs", span: Span { start: Position { line: 655, column: 55, }, end: Position { line: 655, column: 59, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "xorg", span: Span { start: Position { line: 655, column: 60, }, end: Position { line: 655, column: 64, }, }, }, ), Raw( PartRaw { content: "xauth", span: Span { start: Position { line: 655, column: 65, }, end: Position { line: 655, column: 70, }, }, }, ), ], default: None, }, ), }, ), Raw( PartRaw { content: "/bin/xauth systemuser=99\n", span: Span { start: Position { line: 655, column: 1, }, end: Position { line: 656, column: 11, }, }, }, ), ], span: Span { start: Position { line: 654, column: 43, }, end: Position { line: 656, column: 13, }, }, }, ), ], }, ), }, ), operator: Addition, right: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "optionalString", span: Span { start: Position { line: 657, column: 11, }, end: Position { line: 657, column: 25, }, }, }, ), arguments: [ BinaryOperation( BinaryOperation { left: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "cfg", span: Span { start: Position { line: 657, column: 27, }, end: Position { line: 657, column: 30, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "limits", span: Span { start: Position { line: 657, column: 31, }, end: Position { line: 657, column: 37, }, }, }, ), ], default: None, }, ), operator: NotEqualTo, right: List( List { elements: [], span: Span { start: Position { line: 657, column: 41, }, end: Position { line: 657, column: 43, }, }, }, ), }, ), IndentedString( IndentedString { parts: [ Raw( PartRaw { content: "session required ", span: Span { start: Position { line: 658, column: 1, }, end: Position { line: 658, column: 30, }, }, }, ), Interpolation( PartInterpolation { expression: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "pkgs", span: Span { start: Position { line: 658, column: 32, }, end: Position { line: 658, column: 36, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "pam", span: Span { start: Position { line: 658, column: 37, }, end: Position { line: 658, column: 40, }, }, }, ), ], default: None, }, ), }, ), Raw( PartRaw { content: "/lib/security/pam_limits.so conf=", span: Span { start: Position { line: 658, column: 1, }, end: Position { line: 658, column: 74, }, }, }, ), Interpolation( PartInterpolation { expression: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "makeLimitsConf", span: Span { start: Position { line: 658, column: 76, }, end: Position { line: 658, column: 90, }, }, }, ), arguments: [ PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "cfg", span: Span { start: Position { line: 658, column: 91, }, end: Position { line: 658, column: 94, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "limits", span: Span { start: Position { line: 658, column: 95, }, end: Position { line: 658, column: 101, }, }, }, ), ], default: None, }, ), ], }, ), }, ), Raw( PartRaw { content: "\n", span: Span { start: Position { line: 658, column: 1, }, end: Position { line: 659, column: 11, }, }, }, ), ], span: Span { start: Position { line: 657, column: 45, }, end: Position { line: 659, column: 13, }, }, }, ), ], }, ), }, ), operator: Addition, right: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "optionalString", span: Span { start: Position { line: 660, column: 11, }, end: Position { line: 660, column: 25, }, }, }, ), arguments: [ BinaryOperation( BinaryOperation { left: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "cfg", span: Span { start: Position { line: 660, column: 27, }, end: Position { line: 660, column: 30, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "showMotd", span: Span { start: Position { line: 660, column: 31, }, end: Position { line: 660, column: 39, }, }, }, ), ], default: None, }, ), operator: LogicalAnd, right: BinaryOperation( BinaryOperation { left: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "config", span: Span { start: Position { line: 660, column: 43, }, end: Position { line: 660, column: 49, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "users", span: Span { start: Position { line: 660, column: 50, }, end: Position { line: 660, column: 55, }, }, }, ), Raw( PartRaw { content: "motd", span: Span { start: Position { line: 660, column: 56, }, end: Position { line: 660, column: 60, }, }, }, ), ], default: None, }, ), operator: NotEqualTo, right: Identifier( Identifier { id: "null", span: Span { start: Position { line: 660, column: 64, }, end: Position { line: 660, column: 68, }, }, }, ), }, ), }, ), IndentedString( IndentedString { parts: [ Raw( PartRaw { content: "session optional ", span: Span { start: Position { line: 661, column: 1, }, end: Position { line: 661, column: 30, }, }, }, ), Interpolation( PartInterpolation { expression: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "pkgs", span: Span { start: Position { line: 661, column: 32, }, end: Position { line: 661, column: 36, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "pam", span: Span { start: Position { line: 661, column: 37, }, end: Position { line: 661, column: 40, }, }, }, ), ], default: None, }, ), }, ), Raw( PartRaw { content: "/lib/security/pam_motd.so motd=", span: Span { start: Position { line: 661, column: 1, }, end: Position { line: 661, column: 72, }, }, }, ), Interpolation( PartInterpolation { expression: Identifier( Identifier { id: "motd", span: Span { start: Position { line: 661, column: 74, }, end: Position { line: 661, column: 78, }, }, }, ), }, ), Raw( PartRaw { content: "\n", span: Span { start: Position { line: 661, column: 1, }, end: Position { line: 662, column: 11, }, }, }, ), ], span: Span { start: Position { line: 660, column: 70, }, end: Position { line: 662, column: 13, }, }, }, ), ], }, ), }, ), operator: Addition, right: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "optionalString", span: Span { start: Position { line: 663, column: 11, }, end: Position { line: 663, column: 25, }, }, }, ), arguments: [ BinaryOperation( BinaryOperation { left: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "cfg", span: Span { start: Position { line: 663, column: 27, }, end: Position { line: 663, column: 30, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "enableAppArmor", span: Span { start: Position { line: 663, column: 31, }, end: Position { line: 663, column: 45, }, }, }, ), ], default: None, }, ), operator: LogicalAnd, right: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "config", span: Span { start: Position { line: 663, column: 49, }, end: Position { line: 663, column: 55, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "security", span: Span { start: Position { line: 663, column: 56, }, end: Position { line: 663, column: 64, }, }, }, ), Raw( PartRaw { content: "apparmor", span: Span { start: Position { line: 663, column: 65, }, end: Position { line: 663, column: 73, }, }, }, ), Raw( PartRaw { content: "enable", span: Span { start: Position { line: 663, column: 74, }, end: Position { line: 663, column: 80, }, }, }, ), ], default: None, }, ), }, ), IndentedString( IndentedString { parts: [ Raw( PartRaw { content: "session optional ", span: Span { start: Position { line: 664, column: 1, }, end: Position { line: 664, column: 30, }, }, }, ), Interpolation( PartInterpolation { expression: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "pkgs", span: Span { start: Position { line: 664, column: 32, }, end: Position { line: 664, column: 36, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "apparmor-pam", span: Span { start: Position { line: 664, column: 37, }, end: Position { line: 664, column: 49, }, }, }, ), ], default: None, }, ), }, ), Raw( PartRaw { content: "/lib/security/pam_apparmor.so order=user,group,default debug\n", span: Span { start: Position { line: 664, column: 1, }, end: Position { line: 665, column: 11, }, }, }, ), ], span: Span { start: Position { line: 663, column: 82, }, end: Position { line: 665, column: 13, }, }, }, ), ], }, ), }, ), operator: Addition, right: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "optionalString", span: Span { start: Position { line: 666, column: 11, }, end: Position { line: 666, column: 25, }, }, }, ), arguments: [ PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "cfg", span: Span { start: Position { line: 666, column: 27, }, end: Position { line: 666, column: 30, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "enableKwallet", span: Span { start: Position { line: 666, column: 31, }, end: Position { line: 666, column: 44, }, }, }, ), ], default: None, }, ), IndentedString( IndentedString { parts: [ Raw( PartRaw { content: "session optional ", span: Span { start: Position { line: 667, column: 1, }, end: Position { line: 667, column: 30, }, }, }, ), Interpolation( PartInterpolation { expression: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "pkgs", span: Span { start: Position { line: 667, column: 32, }, end: Position { line: 667, column: 36, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "plasma5Packages", span: Span { start: Position { line: 667, column: 37, }, end: Position { line: 667, column: 52, }, }, }, ), Raw( PartRaw { content: "kwallet-pam", span: Span { start: Position { line: 667, column: 53, }, end: Position { line: 667, column: 64, }, }, }, ), ], default: None, }, ), }, ), Raw( PartRaw { content: "/lib/security/pam_kwallet5.so kwalletd=", span: Span { start: Position { line: 667, column: 1, }, end: Position { line: 667, column: 104, }, }, }, ), Interpolation( PartInterpolation { expression: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "pkgs", span: Span { start: Position { line: 667, column: 106, }, end: Position { line: 667, column: 110, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "plasma5Packages", span: Span { start: Position { line: 667, column: 111, }, end: Position { line: 667, column: 126, }, }, }, ), Raw( PartRaw { content: "kwallet", span: Span { start: Position { line: 667, column: 127, }, end: Position { line: 667, column: 134, }, }, }, ), Raw( PartRaw { content: "bin", span: Span { start: Position { line: 667, column: 135, }, end: Position { line: 667, column: 138, }, }, }, ), ], default: None, }, ), }, ), Raw( PartRaw { content: "/bin/kwalletd5\n", span: Span { start: Position { line: 667, column: 1, }, end: Position { line: 668, column: 11, }, }, }, ), ], span: Span { start: Position { line: 666, column: 46, }, end: Position { line: 668, column: 13, }, }, }, ), ], }, ), }, ), operator: Addition, right: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "optionalString", span: Span { start: Position { line: 669, column: 11, }, end: Position { line: 669, column: 25, }, }, }, ), arguments: [ PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "cfg", span: Span { start: Position { line: 669, column: 27, }, end: Position { line: 669, column: 30, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "enableGnomeKeyring", span: Span { start: Position { line: 669, column: 31, }, end: Position { line: 669, column: 49, }, }, }, ), ], default: None, }, ), IndentedString( IndentedString { parts: [ Raw( PartRaw { content: "session optional ", span: Span { start: Position { line: 670, column: 1, }, end: Position { line: 670, column: 30, }, }, }, ), Interpolation( PartInterpolation { expression: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "pkgs", span: Span { start: Position { line: 670, column: 32, }, end: Position { line: 670, column: 36, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "gnome", span: Span { start: Position { line: 670, column: 37, }, end: Position { line: 670, column: 42, }, }, }, ), Raw( PartRaw { content: "gnome-keyring", span: Span { start: Position { line: 670, column: 43, }, end: Position { line: 670, column: 56, }, }, }, ), ], default: None, }, ), }, ), Raw( PartRaw { content: "/lib/security/pam_gnome_keyring.so auto_start\n", span: Span { start: Position { line: 670, column: 1, }, end: Position { line: 671, column: 11, }, }, }, ), ], span: Span { start: Position { line: 669, column: 51, }, end: Position { line: 671, column: 13, }, }, }, ), ], }, ), }, ), operator: Addition, right: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "optionalString", span: Span { start: Position { line: 672, column: 11, }, end: Position { line: 672, column: 25, }, }, }, ), arguments: [ PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "cfg", span: Span { start: Position { line: 672, column: 26, }, end: Position { line: 672, column: 29, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "gnupg", span: Span { start: Position { line: 672, column: 30, }, end: Position { line: 672, column: 35, }, }, }, ), Raw( PartRaw { content: "enable", span: Span { start: Position { line: 672, column: 36, }, end: Position { line: 672, column: 42, }, }, }, ), ], default: None, }, ), IndentedString( IndentedString { parts: [ Raw( PartRaw { content: "session optional ", span: Span { start: Position { line: 673, column: 1, }, end: Position { line: 673, column: 30, }, }, }, ), Interpolation( PartInterpolation { expression: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "pkgs", span: Span { start: Position { line: 673, column: 32, }, end: Position { line: 673, column: 36, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "pam_gnupg", span: Span { start: Position { line: 673, column: 37, }, end: Position { line: 673, column: 46, }, }, }, ), ], default: None, }, ), }, ), Raw( PartRaw { content: "/lib/security/pam_gnupg.so ", span: Span { start: Position { line: 673, column: 1, }, end: Position { line: 673, column: 74, }, }, }, ), Interpolation( PartInterpolation { expression: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "optionalString", span: Span { start: Position { line: 673, column: 76, }, end: Position { line: 673, column: 90, }, }, }, ), arguments: [ PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "cfg", span: Span { start: Position { line: 673, column: 91, }, end: Position { line: 673, column: 94, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "gnupg", span: Span { start: Position { line: 673, column: 95, }, end: Position { line: 673, column: 100, }, }, }, ), Raw( PartRaw { content: "noAutostart", span: Span { start: Position { line: 673, column: 101, }, end: Position { line: 673, column: 112, }, }, }, ), ], default: None, }, ), String( String_ { parts: [ Raw( PartRaw { content: " no-autostart", span: Span { start: Position { line: 673, column: 114, }, end: Position { line: 673, column: 127, }, }, }, ), ], span: Span { start: Position { line: 673, column: 113, }, end: Position { line: 673, column: 128, }, }, }, ), ], }, ), }, ), Raw( PartRaw { content: "\n", span: Span { start: Position { line: 673, column: 1, }, end: Position { line: 674, column: 11, }, }, }, ), ], span: Span { start: Position { line: 672, column: 43, }, end: Position { line: 674, column: 13, }, }, }, ), ], }, ), }, ), operator: Addition, right: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "optionalString", span: Span { start: Position { line: 675, column: 11, }, end: Position { line: 675, column: 25, }, }, }, ), arguments: [ PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "config", span: Span { start: Position { line: 675, column: 27, }, end: Position { line: 675, column: 33, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "virtualisation", span: Span { start: Position { line: 675, column: 34, }, end: Position { line: 675, column: 48, }, }, }, ), Raw( PartRaw { content: "lxc", span: Span { start: Position { line: 675, column: 49, }, end: Position { line: 675, column: 52, }, }, }, ), Raw( PartRaw { content: "lxcfs", span: Span { start: Position { line: 675, column: 53, }, end: Position { line: 675, column: 58, }, }, }, ), Raw( PartRaw { content: "enable", span: Span { start: Position { line: 675, column: 59, }, end: Position { line: 675, column: 65, }, }, }, ), ], default: None, }, ), IndentedString( IndentedString { parts: [ Raw( PartRaw { content: "session optional ", span: Span { start: Position { line: 676, column: 1, }, end: Position { line: 676, column: 30, }, }, }, ), Interpolation( PartInterpolation { expression: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "pkgs", span: Span { start: Position { line: 676, column: 32, }, end: Position { line: 676, column: 36, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "lxc", span: Span { start: Position { line: 676, column: 37, }, end: Position { line: 676, column: 40, }, }, }, ), ], default: None, }, ), }, ), Raw( PartRaw { content: "/lib/security/pam_cgfs.so -c all\n", span: Span { start: Position { line: 676, column: 1, }, end: Position { line: 677, column: 11, }, }, }, ), ], span: Span { start: Position { line: 675, column: 67, }, end: Position { line: 677, column: 13, }, }, }, ), ], }, ), }, ), ], }, ), }, ), ], span: Span { start: Position { line: 441, column: 14, }, end: Position { line: 679, column: 6, }, }, }, ), }, ), ], span: Span { start: Position { line: 11, column: 87, }, end: Position { line: 681, column: 4, }, }, }, ), span: Span { start: Position { line: 11, column: 57, }, end: Position { line: 681, column: 4, }, }, }, ), span: Span { start: Position { line: 11, column: 36, }, end: Position { line: 681, column: 4, }, }, }, ), span: Span { start: Position { line: 11, column: 13, }, end: Position { line: 681, column: 4, }, }, }, ), }, ), Inherit( BindingInherit { from: Some( Identifier( Identifier { id: "pkgs", span: Span { start: Position { line: 684, column: 12, }, end: Position { line: 684, column: 16, }, }, }, ), ), attributes: [ Raw( PartRaw { content: "pam_krb5", span: Span { start: Position { line: 684, column: 18, }, end: Position { line: 684, column: 26, }, }, }, ), Raw( PartRaw { content: "pam_ccreds", span: Span { start: Position { line: 684, column: 27, }, end: Position { line: 684, column: 37, }, }, }, ), ], span: Span { start: Position { line: 8, column: 4, }, end: Position { line: 684, column: 38, }, }, }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "use_ldap", span: Span { start: Position { line: 686, column: 3, }, end: Position { line: 686, column: 11, }, }, }, ), ], to: BinaryOperation( BinaryOperation { left: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "config", span: Span { start: Position { line: 686, column: 15, }, end: Position { line: 686, column: 21, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "users", span: Span { start: Position { line: 686, column: 22, }, end: Position { line: 686, column: 27, }, }, }, ), Raw( PartRaw { content: "ldap", span: Span { start: Position { line: 686, column: 28, }, end: Position { line: 686, column: 32, }, }, }, ), Raw( PartRaw { content: "enable", span: Span { start: Position { line: 686, column: 33, }, end: Position { line: 686, column: 39, }, }, }, ), ], default: None, }, ), operator: LogicalAnd, right: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "config", span: Span { start: Position { line: 686, column: 43, }, end: Position { line: 686, column: 49, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "users", span: Span { start: Position { line: 686, column: 50, }, end: Position { line: 686, column: 55, }, }, }, ), Raw( PartRaw { content: "ldap", span: Span { start: Position { line: 686, column: 56, }, end: Position { line: 686, column: 60, }, }, }, ), Raw( PartRaw { content: "loginPam", span: Span { start: Position { line: 686, column: 61, }, end: Position { line: 686, column: 69, }, }, }, ), ], default: None, }, ), }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "pam_ldap", span: Span { start: Position { line: 687, column: 3, }, end: Position { line: 687, column: 11, }, }, }, ), ], to: IfThenElse( IfThenElse { predicate: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "config", span: Span { start: Position { line: 687, column: 17, }, end: Position { line: 687, column: 23, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "users", span: Span { start: Position { line: 687, column: 24, }, end: Position { line: 687, column: 29, }, }, }, ), Raw( PartRaw { content: "ldap", span: Span { start: Position { line: 687, column: 30, }, end: Position { line: 687, column: 34, }, }, }, ), Raw( PartRaw { content: "daemon", span: Span { start: Position { line: 687, column: 35, }, end: Position { line: 687, column: 41, }, }, }, ), Raw( PartRaw { content: "enable", span: Span { start: Position { line: 687, column: 42, }, end: Position { line: 687, column: 48, }, }, }, ), ], default: None, }, ), then: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "pkgs", span: Span { start: Position { line: 687, column: 54, }, end: Position { line: 687, column: 58, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "nss_pam_ldapd", span: Span { start: Position { line: 687, column: 59, }, end: Position { line: 687, column: 72, }, }, }, ), ], default: None, }, ), else_: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "pkgs", span: Span { start: Position { line: 687, column: 78, }, end: Position { line: 687, column: 82, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "pam_ldap", span: Span { start: Position { line: 687, column: 83, }, end: Position { line: 687, column: 91, }, }, }, ), ], default: None, }, ), span: Span { start: Position { line: 687, column: 14, }, end: Position { line: 687, column: 91, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "makeLimitsConf", span: Span { start: Position { line: 690, column: 3, }, end: Position { line: 690, column: 17, }, }, }, ), ], to: Function( Function { head: Simple( FunctionHeadSimple { identifier: "limits", }, ), body: FunctionApplication( FunctionApplication { function: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "pkgs", span: Span { start: Position { line: 691, column: 5, }, end: Position { line: 691, column: 9, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "writeText", span: Span { start: Position { line: 691, column: 10, }, end: Position { line: 691, column: 19, }, }, }, ), ], default: None, }, ), arguments: [ String( String_ { parts: [ Raw( PartRaw { content: "limits.conf", span: Span { start: Position { line: 691, column: 21, }, end: Position { line: 691, column: 32, }, }, }, ), ], span: Span { start: Position { line: 691, column: 20, }, end: Position { line: 691, column: 33, }, }, }, ), FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "concatMapStrings", span: Span { start: Position { line: 692, column: 9, }, end: Position { line: 692, column: 25, }, }, }, ), arguments: [ Function( Function { head: Destructured( FunctionHeadDestructured { ellipsis: false, identifier: None, arguments: [ FunctionHeadDestructuredArgument { identifier: "domain", default: None, }, FunctionHeadDestructuredArgument { identifier: "type", default: None, }, FunctionHeadDestructuredArgument { identifier: "item", default: None, }, FunctionHeadDestructuredArgument { identifier: "value", default: None, }, ], }, ), body: String( String_ { parts: [ Interpolation( PartInterpolation { expression: Identifier( Identifier { id: "domain", span: Span { start: Position { line: 693, column: 13, }, end: Position { line: 693, column: 19, }, }, }, ), }, ), Raw( PartRaw { content: " ", span: Span { start: Position { line: 693, column: 11, }, end: Position { line: 693, column: 21, }, }, }, ), Interpolation( PartInterpolation { expression: Identifier( Identifier { id: "type", span: Span { start: Position { line: 693, column: 23, }, end: Position { line: 693, column: 27, }, }, }, ), }, ), Raw( PartRaw { content: " ", span: Span { start: Position { line: 693, column: 11, }, end: Position { line: 693, column: 29, }, }, }, ), Interpolation( PartInterpolation { expression: Identifier( Identifier { id: "item", span: Span { start: Position { line: 693, column: 31, }, end: Position { line: 693, column: 35, }, }, }, ), }, ), Raw( PartRaw { content: " ", span: Span { start: Position { line: 693, column: 11, }, end: Position { line: 693, column: 37, }, }, }, ), Interpolation( PartInterpolation { expression: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "toString", span: Span { start: Position { line: 693, column: 39, }, end: Position { line: 693, column: 47, }, }, }, ), arguments: [ Identifier( Identifier { id: "value", span: Span { start: Position { line: 693, column: 48, }, end: Position { line: 693, column: 53, }, }, }, ), ], }, ), }, ), Raw( PartRaw { content: "\n", span: Span { start: Position { line: 693, column: 11, }, end: Position { line: 693, column: 56, }, }, }, ), ], span: Span { start: Position { line: 693, column: 10, }, end: Position { line: 693, column: 57, }, }, }, ), span: Span { start: Position { line: 692, column: 27, }, end: Position { line: 693, column: 57, }, }, }, ), Identifier( Identifier { id: "limits", span: Span { start: Position { line: 694, column: 10, }, end: Position { line: 694, column: 16, }, }, }, ), ], }, ), ], }, ), span: Span { start: Position { line: 690, column: 20, }, end: Position { line: 694, column: 17, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "limitsType", span: Span { start: Position { line: 696, column: 3, }, end: Position { line: 696, column: 13, }, }, }, ), ], to: With( With { expression: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "lib", span: Span { start: Position { line: 696, column: 21, }, end: Position { line: 696, column: 24, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "types", span: Span { start: Position { line: 696, column: 25, }, end: Position { line: 696, column: 30, }, }, }, ), ], default: None, }, ), target: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "listOf", span: Span { start: Position { line: 696, column: 32, }, end: Position { line: 696, column: 38, }, }, }, ), arguments: [ FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "submodule", span: Span { start: Position { line: 696, column: 40, }, end: Position { line: 696, column: 49, }, }, }, ), arguments: [ Function( Function { head: Destructured( FunctionHeadDestructured { ellipsis: true, identifier: None, arguments: [], }, ), body: Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "options", span: Span { start: Position { line: 697, column: 5, }, end: Position { line: 697, column: 12, }, }, }, ), ], to: Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "domain", span: Span { start: Position { line: 698, column: 7, }, end: Position { line: 698, column: 13, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "mkOption", span: Span { start: Position { line: 698, column: 16, }, end: Position { line: 698, column: 24, }, }, }, ), arguments: [ Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "description", span: Span { start: Position { line: 699, column: 9, }, end: Position { line: 699, column: 20, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "lib", span: Span { start: Position { line: 699, column: 23, }, end: Position { line: 699, column: 26, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "mdDoc", span: Span { start: Position { line: 699, column: 27, }, end: Position { line: 699, column: 32, }, }, }, ), ], default: None, }, ), arguments: [ String( String_ { parts: [ Raw( PartRaw { content: "Username, groupname, or wildcard this limit applies to", span: Span { start: Position { line: 699, column: 34, }, end: Position { line: 699, column: 88, }, }, }, ), ], span: Span { start: Position { line: 699, column: 33, }, end: Position { line: 699, column: 89, }, }, }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "example", span: Span { start: Position { line: 700, column: 9, }, end: Position { line: 700, column: 16, }, }, }, ), ], to: String( String_ { parts: [ Raw( PartRaw { content: "@wheel", span: Span { start: Position { line: 700, column: 20, }, end: Position { line: 700, column: 26, }, }, }, ), ], span: Span { start: Position { line: 700, column: 19, }, end: Position { line: 700, column: 27, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "type", span: Span { start: Position { line: 701, column: 9, }, end: Position { line: 701, column: 13, }, }, }, ), ], to: Identifier( Identifier { id: "str", span: Span { start: Position { line: 701, column: 16, }, end: Position { line: 701, column: 19, }, }, }, ), }, ), ], span: Span { start: Position { line: 698, column: 25, }, end: Position { line: 702, column: 8, }, }, }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "type", span: Span { start: Position { line: 704, column: 7, }, end: Position { line: 704, column: 11, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "mkOption", span: Span { start: Position { line: 704, column: 14, }, end: Position { line: 704, column: 22, }, }, }, ), arguments: [ Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "description", span: Span { start: Position { line: 705, column: 9, }, end: Position { line: 705, column: 20, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "lib", span: Span { start: Position { line: 705, column: 23, }, end: Position { line: 705, column: 26, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "mdDoc", span: Span { start: Position { line: 705, column: 27, }, end: Position { line: 705, column: 32, }, }, }, ), ], default: None, }, ), arguments: [ String( String_ { parts: [ Raw( PartRaw { content: "Type of this limit", span: Span { start: Position { line: 705, column: 34, }, end: Position { line: 705, column: 52, }, }, }, ), ], span: Span { start: Position { line: 705, column: 33, }, end: Position { line: 705, column: 53, }, }, }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "type", span: Span { start: Position { line: 706, column: 9, }, end: Position { line: 706, column: 13, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "enum", span: Span { start: Position { line: 706, column: 16, }, end: Position { line: 706, column: 20, }, }, }, ), arguments: [ List( List { elements: [ String( String_ { parts: [ Raw( PartRaw { content: "-", span: Span { start: Position { line: 706, column: 24, }, end: Position { line: 706, column: 25, }, }, }, ), ], span: Span { start: Position { line: 706, column: 23, }, end: Position { line: 706, column: 26, }, }, }, ), String( String_ { parts: [ Raw( PartRaw { content: "hard", span: Span { start: Position { line: 706, column: 28, }, end: Position { line: 706, column: 32, }, }, }, ), ], span: Span { start: Position { line: 706, column: 27, }, end: Position { line: 706, column: 33, }, }, }, ), String( String_ { parts: [ Raw( PartRaw { content: "soft", span: Span { start: Position { line: 706, column: 35, }, end: Position { line: 706, column: 39, }, }, }, ), ], span: Span { start: Position { line: 706, column: 34, }, end: Position { line: 706, column: 40, }, }, }, ), ], span: Span { start: Position { line: 706, column: 21, }, end: Position { line: 706, column: 42, }, }, }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "default", span: Span { start: Position { line: 707, column: 9, }, end: Position { line: 707, column: 16, }, }, }, ), ], to: String( String_ { parts: [ Raw( PartRaw { content: "-", span: Span { start: Position { line: 707, column: 20, }, end: Position { line: 707, column: 21, }, }, }, ), ], span: Span { start: Position { line: 707, column: 19, }, end: Position { line: 707, column: 22, }, }, }, ), }, ), ], span: Span { start: Position { line: 704, column: 23, }, end: Position { line: 708, column: 8, }, }, }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "item", span: Span { start: Position { line: 710, column: 7, }, end: Position { line: 710, column: 11, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "mkOption", span: Span { start: Position { line: 710, column: 14, }, end: Position { line: 710, column: 22, }, }, }, ), arguments: [ Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "description", span: Span { start: Position { line: 711, column: 9, }, end: Position { line: 711, column: 20, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "lib", span: Span { start: Position { line: 711, column: 23, }, end: Position { line: 711, column: 26, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "mdDoc", span: Span { start: Position { line: 711, column: 27, }, end: Position { line: 711, column: 32, }, }, }, ), ], default: None, }, ), arguments: [ String( String_ { parts: [ Raw( PartRaw { content: "Item this limit applies to", span: Span { start: Position { line: 711, column: 34, }, end: Position { line: 711, column: 60, }, }, }, ), ], span: Span { start: Position { line: 711, column: 33, }, end: Position { line: 711, column: 61, }, }, }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "type", span: Span { start: Position { line: 712, column: 9, }, end: Position { line: 712, column: 13, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "enum", span: Span { start: Position { line: 712, column: 16, }, end: Position { line: 712, column: 20, }, }, }, ), arguments: [ List( List { elements: [ String( String_ { parts: [ Raw( PartRaw { content: "core", span: Span { start: Position { line: 713, column: 12, }, end: Position { line: 713, column: 16, }, }, }, ), ], span: Span { start: Position { line: 713, column: 11, }, end: Position { line: 713, column: 17, }, }, }, ), String( String_ { parts: [ Raw( PartRaw { content: "data", span: Span { start: Position { line: 714, column: 12, }, end: Position { line: 714, column: 16, }, }, }, ), ], span: Span { start: Position { line: 714, column: 11, }, end: Position { line: 714, column: 17, }, }, }, ), String( String_ { parts: [ Raw( PartRaw { content: "fsize", span: Span { start: Position { line: 715, column: 12, }, end: Position { line: 715, column: 17, }, }, }, ), ], span: Span { start: Position { line: 715, column: 11, }, end: Position { line: 715, column: 18, }, }, }, ), String( String_ { parts: [ Raw( PartRaw { content: "memlock", span: Span { start: Position { line: 716, column: 12, }, end: Position { line: 716, column: 19, }, }, }, ), ], span: Span { start: Position { line: 716, column: 11, }, end: Position { line: 716, column: 20, }, }, }, ), String( String_ { parts: [ Raw( PartRaw { content: "nofile", span: Span { start: Position { line: 717, column: 12, }, end: Position { line: 717, column: 18, }, }, }, ), ], span: Span { start: Position { line: 717, column: 11, }, end: Position { line: 717, column: 19, }, }, }, ), String( String_ { parts: [ Raw( PartRaw { content: "rss", span: Span { start: Position { line: 718, column: 12, }, end: Position { line: 718, column: 15, }, }, }, ), ], span: Span { start: Position { line: 718, column: 11, }, end: Position { line: 718, column: 16, }, }, }, ), String( String_ { parts: [ Raw( PartRaw { content: "stack", span: Span { start: Position { line: 719, column: 12, }, end: Position { line: 719, column: 17, }, }, }, ), ], span: Span { start: Position { line: 719, column: 11, }, end: Position { line: 719, column: 18, }, }, }, ), String( String_ { parts: [ Raw( PartRaw { content: "cpu", span: Span { start: Position { line: 720, column: 12, }, end: Position { line: 720, column: 15, }, }, }, ), ], span: Span { start: Position { line: 720, column: 11, }, end: Position { line: 720, column: 16, }, }, }, ), String( String_ { parts: [ Raw( PartRaw { content: "nproc", span: Span { start: Position { line: 721, column: 12, }, end: Position { line: 721, column: 17, }, }, }, ), ], span: Span { start: Position { line: 721, column: 11, }, end: Position { line: 721, column: 18, }, }, }, ), String( String_ { parts: [ Raw( PartRaw { content: "as", span: Span { start: Position { line: 722, column: 12, }, end: Position { line: 722, column: 14, }, }, }, ), ], span: Span { start: Position { line: 722, column: 11, }, end: Position { line: 722, column: 15, }, }, }, ), String( String_ { parts: [ Raw( PartRaw { content: "maxlogins", span: Span { start: Position { line: 723, column: 12, }, end: Position { line: 723, column: 21, }, }, }, ), ], span: Span { start: Position { line: 723, column: 11, }, end: Position { line: 723, column: 22, }, }, }, ), String( String_ { parts: [ Raw( PartRaw { content: "maxsyslogins", span: Span { start: Position { line: 724, column: 12, }, end: Position { line: 724, column: 24, }, }, }, ), ], span: Span { start: Position { line: 724, column: 11, }, end: Position { line: 724, column: 25, }, }, }, ), String( String_ { parts: [ Raw( PartRaw { content: "priority", span: Span { start: Position { line: 725, column: 12, }, end: Position { line: 725, column: 20, }, }, }, ), ], span: Span { start: Position { line: 725, column: 11, }, end: Position { line: 725, column: 21, }, }, }, ), String( String_ { parts: [ Raw( PartRaw { content: "locks", span: Span { start: Position { line: 726, column: 12, }, end: Position { line: 726, column: 17, }, }, }, ), ], span: Span { start: Position { line: 726, column: 11, }, end: Position { line: 726, column: 18, }, }, }, ), String( String_ { parts: [ Raw( PartRaw { content: "sigpending", span: Span { start: Position { line: 727, column: 12, }, end: Position { line: 727, column: 22, }, }, }, ), ], span: Span { start: Position { line: 727, column: 11, }, end: Position { line: 727, column: 23, }, }, }, ), String( String_ { parts: [ Raw( PartRaw { content: "msgqueue", span: Span { start: Position { line: 728, column: 12, }, end: Position { line: 728, column: 20, }, }, }, ), ], span: Span { start: Position { line: 728, column: 11, }, end: Position { line: 728, column: 21, }, }, }, ), String( String_ { parts: [ Raw( PartRaw { content: "nice", span: Span { start: Position { line: 729, column: 12, }, end: Position { line: 729, column: 16, }, }, }, ), ], span: Span { start: Position { line: 729, column: 11, }, end: Position { line: 729, column: 17, }, }, }, ), String( String_ { parts: [ Raw( PartRaw { content: "rtprio", span: Span { start: Position { line: 730, column: 12, }, end: Position { line: 730, column: 18, }, }, }, ), ], span: Span { start: Position { line: 730, column: 11, }, end: Position { line: 730, column: 19, }, }, }, ), ], span: Span { start: Position { line: 712, column: 21, }, end: Position { line: 731, column: 10, }, }, }, ), ], }, ), }, ), ], span: Span { start: Position { line: 710, column: 23, }, end: Position { line: 732, column: 8, }, }, }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "value", span: Span { start: Position { line: 734, column: 7, }, end: Position { line: 734, column: 12, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "mkOption", span: Span { start: Position { line: 734, column: 15, }, end: Position { line: 734, column: 23, }, }, }, ), arguments: [ Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "description", span: Span { start: Position { line: 735, column: 9, }, end: Position { line: 735, column: 20, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "lib", span: Span { start: Position { line: 735, column: 23, }, end: Position { line: 735, column: 26, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "mdDoc", span: Span { start: Position { line: 735, column: 27, }, end: Position { line: 735, column: 32, }, }, }, ), ], default: None, }, ), arguments: [ String( String_ { parts: [ Raw( PartRaw { content: "Value of this limit", span: Span { start: Position { line: 735, column: 34, }, end: Position { line: 735, column: 53, }, }, }, ), ], span: Span { start: Position { line: 735, column: 33, }, end: Position { line: 735, column: 54, }, }, }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "type", span: Span { start: Position { line: 736, column: 9, }, end: Position { line: 736, column: 13, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "oneOf", span: Span { start: Position { line: 736, column: 16, }, end: Position { line: 736, column: 21, }, }, }, ), arguments: [ List( List { elements: [ Identifier( Identifier { id: "str", span: Span { start: Position { line: 736, column: 24, }, end: Position { line: 736, column: 27, }, }, }, ), Identifier( Identifier { id: "int", span: Span { start: Position { line: 736, column: 28, }, end: Position { line: 736, column: 31, }, }, }, ), ], span: Span { start: Position { line: 736, column: 22, }, end: Position { line: 736, column: 33, }, }, }, ), ], }, ), }, ), ], span: Span { start: Position { line: 734, column: 24, }, end: Position { line: 737, column: 8, }, }, }, ), ], }, ), }, ), ], span: Span { start: Position { line: 697, column: 15, }, end: Position { line: 738, column: 6, }, }, }, ), }, ), ], span: Span { start: Position { line: 696, column: 60, }, end: Position { line: 739, column: 4, }, }, }, ), span: Span { start: Position { line: 696, column: 51, }, end: Position { line: 739, column: 4, }, }, }, ), ], }, ), ], }, ), span: Span { start: Position { line: 696, column: 16, }, end: Position { line: 739, column: 6, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "motd", span: Span { start: Position { line: 741, column: 3, }, end: Position { line: 741, column: 7, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "pkgs", span: Span { start: Position { line: 741, column: 10, }, end: Position { line: 741, column: 14, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "writeText", span: Span { start: Position { line: 741, column: 15, }, end: Position { line: 741, column: 24, }, }, }, ), ], default: None, }, ), arguments: [ String( String_ { parts: [ Raw( PartRaw { content: "motd", span: Span { start: Position { line: 741, column: 26, }, end: Position { line: 741, column: 30, }, }, }, ), ], span: Span { start: Position { line: 741, column: 25, }, end: Position { line: 741, column: 31, }, }, }, ), PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "config", span: Span { start: Position { line: 741, column: 32, }, end: Position { line: 741, column: 38, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "users", span: Span { start: Position { line: 741, column: 39, }, end: Position { line: 741, column: 44, }, }, }, ), Raw( PartRaw { content: "motd", span: Span { start: Position { line: 741, column: 45, }, end: Position { line: 741, column: 49, }, }, }, ), ], default: None, }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "makePAMService", span: Span { start: Position { line: 743, column: 3, }, end: Position { line: 743, column: 17, }, }, }, ), ], to: Function( Function { head: Simple( FunctionHeadSimple { identifier: "name", }, ), body: Function( Function { head: Simple( FunctionHeadSimple { identifier: "service", }, ), body: Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "name", span: Span { start: Position { line: 744, column: 7, }, end: Position { line: 744, column: 11, }, }, }, ), ], to: String( String_ { parts: [ Raw( PartRaw { content: "pam.d/", span: Span { start: Position { line: 744, column: 15, }, end: Position { line: 744, column: 28, }, }, }, ), Interpolation( PartInterpolation { expression: Identifier( Identifier { id: "name", span: Span { start: Position { line: 744, column: 23, }, end: Position { line: 744, column: 27, }, }, }, ), }, ), ], span: Span { start: Position { line: 744, column: 14, }, end: Position { line: 744, column: 29, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "value", span: Span { start: Position { line: 745, column: 7, }, end: Position { line: 745, column: 12, }, }, }, ), Raw( PartRaw { content: "source", span: Span { start: Position { line: 745, column: 13, }, end: Position { line: 745, column: 19, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "pkgs", span: Span { start: Position { line: 745, column: 22, }, end: Position { line: 745, column: 26, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "writeText", span: Span { start: Position { line: 745, column: 27, }, end: Position { line: 745, column: 36, }, }, }, ), ], default: None, }, ), arguments: [ String( String_ { parts: [ Interpolation( PartInterpolation { expression: Identifier( Identifier { id: "name", span: Span { start: Position { line: 745, column: 40, }, end: Position { line: 745, column: 44, }, }, }, ), }, ), Raw( PartRaw { content: ".pam", span: Span { start: Position { line: 745, column: 38, }, end: Position { line: 745, column: 49, }, }, }, ), ], span: Span { start: Position { line: 745, column: 37, }, end: Position { line: 745, column: 50, }, }, }, ), PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "service", span: Span { start: Position { line: 745, column: 51, }, end: Position { line: 745, column: 58, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "text", span: Span { start: Position { line: 745, column: 59, }, end: Position { line: 745, column: 63, }, }, }, ), ], default: None, }, ), ], }, ), }, ), ], span: Span { start: Position { line: 744, column: 5, }, end: Position { line: 746, column: 6, }, }, }, ), span: Span { start: Position { line: 743, column: 26, }, end: Position { line: 746, column: 6, }, }, }, ), span: Span { start: Position { line: 743, column: 20, }, end: Position { line: 746, column: 6, }, }, }, ), }, ), ], target: Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "imports", span: Span { start: Position { line: 752, column: 3, }, end: Position { line: 752, column: 10, }, }, }, ), ], to: List( List { elements: [ FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "mkRenamedOptionModule", span: Span { start: Position { line: 753, column: 6, }, end: Position { line: 753, column: 27, }, }, }, ), arguments: [ List( List { elements: [ String( String_ { parts: [ Raw( PartRaw { content: "security", span: Span { start: Position { line: 753, column: 31, }, end: Position { line: 753, column: 39, }, }, }, ), ], span: Span { start: Position { line: 753, column: 30, }, end: Position { line: 753, column: 40, }, }, }, ), String( String_ { parts: [ Raw( PartRaw { content: "pam", span: Span { start: Position { line: 753, column: 42, }, end: Position { line: 753, column: 45, }, }, }, ), ], span: Span { start: Position { line: 753, column: 41, }, end: Position { line: 753, column: 46, }, }, }, ), String( String_ { parts: [ Raw( PartRaw { content: "enableU2F", span: Span { start: Position { line: 753, column: 48, }, end: Position { line: 753, column: 57, }, }, }, ), ], span: Span { start: Position { line: 753, column: 47, }, end: Position { line: 753, column: 58, }, }, }, ), ], span: Span { start: Position { line: 753, column: 28, }, end: Position { line: 753, column: 60, }, }, }, ), List( List { elements: [ String( String_ { parts: [ Raw( PartRaw { content: "security", span: Span { start: Position { line: 753, column: 64, }, end: Position { line: 753, column: 72, }, }, }, ), ], span: Span { start: Position { line: 753, column: 63, }, end: Position { line: 753, column: 73, }, }, }, ), String( String_ { parts: [ Raw( PartRaw { content: "pam", span: Span { start: Position { line: 753, column: 75, }, end: Position { line: 753, column: 78, }, }, }, ), ], span: Span { start: Position { line: 753, column: 74, }, end: Position { line: 753, column: 79, }, }, }, ), String( String_ { parts: [ Raw( PartRaw { content: "u2f", span: Span { start: Position { line: 753, column: 81, }, end: Position { line: 753, column: 84, }, }, }, ), ], span: Span { start: Position { line: 753, column: 80, }, end: Position { line: 753, column: 85, }, }, }, ), String( String_ { parts: [ Raw( PartRaw { content: "enable", span: Span { start: Position { line: 753, column: 87, }, end: Position { line: 753, column: 93, }, }, }, ), ], span: Span { start: Position { line: 753, column: 86, }, end: Position { line: 753, column: 94, }, }, }, ), ], span: Span { start: Position { line: 753, column: 61, }, end: Position { line: 753, column: 96, }, }, }, ), ], }, ), ], span: Span { start: Position { line: 752, column: 13, }, end: Position { line: 754, column: 4, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "options", span: Span { start: Position { line: 758, column: 3, }, end: Position { line: 758, column: 10, }, }, }, ), ], to: Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "security", span: Span { start: Position { line: 760, column: 5, }, end: Position { line: 760, column: 13, }, }, }, ), Raw( PartRaw { content: "pam", span: Span { start: Position { line: 760, column: 14, }, end: Position { line: 760, column: 17, }, }, }, ), Raw( PartRaw { content: "loginLimits", span: Span { start: Position { line: 760, column: 18, }, end: Position { line: 760, column: 29, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "mkOption", span: Span { start: Position { line: 760, column: 32, }, end: Position { line: 760, column: 40, }, }, }, ), arguments: [ Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "default", span: Span { start: Position { line: 761, column: 7, }, end: Position { line: 761, column: 14, }, }, }, ), ], to: List( List { elements: [], span: Span { start: Position { line: 761, column: 17, }, end: Position { line: 761, column: 19, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "type", span: Span { start: Position { line: 762, column: 7, }, end: Position { line: 762, column: 11, }, }, }, ), ], to: Identifier( Identifier { id: "limitsType", span: Span { start: Position { line: 762, column: 14, }, end: Position { line: 762, column: 24, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "example", span: Span { start: Position { line: 763, column: 7, }, end: Position { line: 763, column: 14, }, }, }, ), ], to: List( List { elements: [ Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "domain", span: Span { start: Position { line: 764, column: 13, }, end: Position { line: 764, column: 19, }, }, }, ), ], to: String( String_ { parts: [ Raw( PartRaw { content: "ftp", span: Span { start: Position { line: 764, column: 23, }, end: Position { line: 764, column: 26, }, }, }, ), ], span: Span { start: Position { line: 764, column: 22, }, end: Position { line: 764, column: 27, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "type", span: Span { start: Position { line: 765, column: 13, }, end: Position { line: 765, column: 17, }, }, }, ), ], to: String( String_ { parts: [ Raw( PartRaw { content: "hard", span: Span { start: Position { line: 765, column: 23, }, end: Position { line: 765, column: 27, }, }, }, ), ], span: Span { start: Position { line: 765, column: 22, }, end: Position { line: 765, column: 28, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "item", span: Span { start: Position { line: 766, column: 13, }, end: Position { line: 766, column: 17, }, }, }, ), ], to: String( String_ { parts: [ Raw( PartRaw { content: "nproc", span: Span { start: Position { line: 766, column: 23, }, end: Position { line: 766, column: 28, }, }, }, ), ], span: Span { start: Position { line: 766, column: 22, }, end: Position { line: 766, column: 29, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "value", span: Span { start: Position { line: 767, column: 13, }, end: Position { line: 767, column: 18, }, }, }, ), ], to: String( String_ { parts: [ Raw( PartRaw { content: "0", span: Span { start: Position { line: 767, column: 23, }, end: Position { line: 767, column: 24, }, }, }, ), ], span: Span { start: Position { line: 767, column: 22, }, end: Position { line: 767, column: 25, }, }, }, ), }, ), ], span: Span { start: Position { line: 764, column: 11, }, end: Position { line: 768, column: 12, }, }, }, ), Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "domain", span: Span { start: Position { line: 769, column: 13, }, end: Position { line: 769, column: 19, }, }, }, ), ], to: String( String_ { parts: [ Raw( PartRaw { content: "@student", span: Span { start: Position { line: 769, column: 23, }, end: Position { line: 769, column: 31, }, }, }, ), ], span: Span { start: Position { line: 769, column: 22, }, end: Position { line: 769, column: 32, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "type", span: Span { start: Position { line: 770, column: 13, }, end: Position { line: 770, column: 17, }, }, }, ), ], to: String( String_ { parts: [ Raw( PartRaw { content: "-", span: Span { start: Position { line: 770, column: 23, }, end: Position { line: 770, column: 24, }, }, }, ), ], span: Span { start: Position { line: 770, column: 22, }, end: Position { line: 770, column: 25, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "item", span: Span { start: Position { line: 771, column: 13, }, end: Position { line: 771, column: 17, }, }, }, ), ], to: String( String_ { parts: [ Raw( PartRaw { content: "maxlogins", span: Span { start: Position { line: 771, column: 23, }, end: Position { line: 771, column: 32, }, }, }, ), ], span: Span { start: Position { line: 771, column: 22, }, end: Position { line: 771, column: 33, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "value", span: Span { start: Position { line: 772, column: 13, }, end: Position { line: 772, column: 18, }, }, }, ), ], to: String( String_ { parts: [ Raw( PartRaw { content: "4", span: Span { start: Position { line: 772, column: 23, }, end: Position { line: 772, column: 24, }, }, }, ), ], span: Span { start: Position { line: 772, column: 22, }, end: Position { line: 772, column: 25, }, }, }, ), }, ), ], span: Span { start: Position { line: 769, column: 11, }, end: Position { line: 773, column: 12, }, }, }, ), ], span: Span { start: Position { line: 764, column: 9, }, end: Position { line: 774, column: 9, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "description", span: Span { start: Position { line: 776, column: 6, }, end: Position { line: 776, column: 17, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "lib", span: Span { start: Position { line: 776, column: 20, }, end: Position { line: 776, column: 23, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "mdDoc", span: Span { start: Position { line: 776, column: 24, }, end: Position { line: 776, column: 29, }, }, }, ), ], default: None, }, ), arguments: [ IndentedString( IndentedString { parts: [ Raw( PartRaw { content: "Define resource limits that should apply to users or groups.\nEach item in the list should be an attribute set with a\n{var}`domain`, {var}`type`,\n{var}`item`, and {var}`value`\nattribute. The syntax and semantics of these attributes\nmust be that described in {manpage}`limits.conf(5)`.\n\nNote that these limits do not apply to systemd services,\nwhose limits can be changed via {option}`systemd.extraConfig`\ninstead.\n", span: Span { start: Position { line: 777, column: 1, }, end: Position { line: 787, column: 6, }, }, }, ), ], span: Span { start: Position { line: 776, column: 30, }, end: Position { line: 787, column: 8, }, }, }, ), ], }, ), }, ), ], span: Span { start: Position { line: 760, column: 41, }, end: Position { line: 788, column: 6, }, }, }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "security", span: Span { start: Position { line: 790, column: 5, }, end: Position { line: 790, column: 13, }, }, }, ), Raw( PartRaw { content: "pam", span: Span { start: Position { line: 790, column: 14, }, end: Position { line: 790, column: 17, }, }, }, ), Raw( PartRaw { content: "services", span: Span { start: Position { line: 790, column: 18, }, end: Position { line: 790, column: 26, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "mkOption", span: Span { start: Position { line: 790, column: 29, }, end: Position { line: 790, column: 37, }, }, }, ), arguments: [ Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "default", span: Span { start: Position { line: 791, column: 7, }, end: Position { line: 791, column: 14, }, }, }, ), ], to: Map( Map { recursive: false, bindings: [], span: Span { start: Position { line: 791, column: 17, }, end: Position { line: 791, column: 19, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "type", span: Span { start: Position { line: 792, column: 7, }, end: Position { line: 792, column: 11, }, }, }, ), ], to: With( With { expression: Identifier( Identifier { id: "types", span: Span { start: Position { line: 792, column: 19, }, end: Position { line: 792, column: 24, }, }, }, ), target: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "attrsOf", span: Span { start: Position { line: 792, column: 26, }, end: Position { line: 792, column: 33, }, }, }, ), arguments: [ FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "submodule", span: Span { start: Position { line: 792, column: 35, }, end: Position { line: 792, column: 44, }, }, }, ), arguments: [ Identifier( Identifier { id: "pamOpts", span: Span { start: Position { line: 792, column: 45, }, end: Position { line: 792, column: 52, }, }, }, ), ], }, ), ], }, ), span: Span { start: Position { line: 792, column: 14, }, end: Position { line: 792, column: 53, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "description", span: Span { start: Position { line: 793, column: 7, }, end: Position { line: 793, column: 18, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "lib", span: Span { start: Position { line: 794, column: 9, }, end: Position { line: 794, column: 12, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "mdDoc", span: Span { start: Position { line: 794, column: 13, }, end: Position { line: 794, column: 18, }, }, }, ), ], default: None, }, ), arguments: [ IndentedString( IndentedString { parts: [ Raw( PartRaw { content: "This option defines the PAM services. A service typically\ncorresponds to a program that uses PAM,\ne.g. {command}`login` or {command}`passwd`.\nEach attribute of this set defines a PAM service, with the attribute name\ndefining the name of the service.\n", span: Span { start: Position { line: 795, column: 1, }, end: Position { line: 800, column: 9, }, }, }, ), ], span: Span { start: Position { line: 794, column: 19, }, end: Position { line: 800, column: 11, }, }, }, ), ], }, ), }, ), ], span: Span { start: Position { line: 790, column: 38, }, end: Position { line: 801, column: 6, }, }, }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "security", span: Span { start: Position { line: 803, column: 5, }, end: Position { line: 803, column: 13, }, }, }, ), Raw( PartRaw { content: "pam", span: Span { start: Position { line: 803, column: 14, }, end: Position { line: 803, column: 17, }, }, }, ), Raw( PartRaw { content: "makeHomeDir", span: Span { start: Position { line: 803, column: 18, }, end: Position { line: 803, column: 29, }, }, }, ), Raw( PartRaw { content: "skelDirectory", span: Span { start: Position { line: 803, column: 30, }, end: Position { line: 803, column: 43, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "mkOption", span: Span { start: Position { line: 803, column: 46, }, end: Position { line: 803, column: 54, }, }, }, ), arguments: [ Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "type", span: Span { start: Position { line: 804, column: 7, }, end: Position { line: 804, column: 11, }, }, }, ), ], to: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "types", span: Span { start: Position { line: 804, column: 14, }, end: Position { line: 804, column: 19, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "str", span: Span { start: Position { line: 804, column: 20, }, end: Position { line: 804, column: 23, }, }, }, ), ], default: None, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "default", span: Span { start: Position { line: 805, column: 7, }, end: Position { line: 805, column: 14, }, }, }, ), ], to: String( String_ { parts: [ Raw( PartRaw { content: "/var/empty", span: Span { start: Position { line: 805, column: 18, }, end: Position { line: 805, column: 28, }, }, }, ), ], span: Span { start: Position { line: 805, column: 17, }, end: Position { line: 805, column: 29, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "example", span: Span { start: Position { line: 806, column: 7, }, end: Position { line: 806, column: 14, }, }, }, ), ], to: String( String_ { parts: [ Raw( PartRaw { content: "/etc/skel", span: Span { start: Position { line: 806, column: 19, }, end: Position { line: 806, column: 28, }, }, }, ), ], span: Span { start: Position { line: 806, column: 18, }, end: Position { line: 806, column: 29, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "description", span: Span { start: Position { line: 807, column: 7, }, end: Position { line: 807, column: 18, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "lib", span: Span { start: Position { line: 807, column: 21, }, end: Position { line: 807, column: 24, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "mdDoc", span: Span { start: Position { line: 807, column: 25, }, end: Position { line: 807, column: 30, }, }, }, ), ], default: None, }, ), arguments: [ IndentedString( IndentedString { parts: [ Raw( PartRaw { content: "Path to skeleton directory whose contents are copied to home\ndirectories newly created by `pam_mkhomedir`.\n", span: Span { start: Position { line: 808, column: 1, }, end: Position { line: 810, column: 7, }, }, }, ), ], span: Span { start: Position { line: 807, column: 31, }, end: Position { line: 810, column: 9, }, }, }, ), ], }, ), }, ), ], span: Span { start: Position { line: 803, column: 55, }, end: Position { line: 811, column: 6, }, }, }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "security", span: Span { start: Position { line: 813, column: 5, }, end: Position { line: 813, column: 13, }, }, }, ), Raw( PartRaw { content: "pam", span: Span { start: Position { line: 813, column: 14, }, end: Position { line: 813, column: 17, }, }, }, ), Raw( PartRaw { content: "enableSSHAgentAuth", span: Span { start: Position { line: 813, column: 18, }, end: Position { line: 813, column: 36, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "mkOption", span: Span { start: Position { line: 813, column: 39, }, end: Position { line: 813, column: 47, }, }, }, ), arguments: [ Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "type", span: Span { start: Position { line: 814, column: 7, }, end: Position { line: 814, column: 11, }, }, }, ), ], to: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "types", span: Span { start: Position { line: 814, column: 14, }, end: Position { line: 814, column: 19, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "bool", span: Span { start: Position { line: 814, column: 20, }, end: Position { line: 814, column: 24, }, }, }, ), ], default: None, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "default", span: Span { start: Position { line: 815, column: 7, }, end: Position { line: 815, column: 14, }, }, }, ), ], to: Identifier( Identifier { id: "false", span: Span { start: Position { line: 815, column: 17, }, end: Position { line: 815, column: 22, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "description", span: Span { start: Position { line: 816, column: 7, }, end: Position { line: 816, column: 18, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "lib", span: Span { start: Position { line: 817, column: 9, }, end: Position { line: 817, column: 12, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "mdDoc", span: Span { start: Position { line: 817, column: 13, }, end: Position { line: 817, column: 18, }, }, }, ), ], default: None, }, ), arguments: [ IndentedString( IndentedString { parts: [ Raw( PartRaw { content: "Enable sudo logins if the user's SSH agent provides a key\npresent in {file}`~/.ssh/authorized_keys`.\nThis allows machines to exclusively use SSH keys instead of\npasswords.\n", span: Span { start: Position { line: 818, column: 1, }, end: Position { line: 822, column: 9, }, }, }, ), ], span: Span { start: Position { line: 817, column: 19, }, end: Position { line: 822, column: 11, }, }, }, ), ], }, ), }, ), ], span: Span { start: Position { line: 813, column: 48, }, end: Position { line: 823, column: 6, }, }, }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "security", span: Span { start: Position { line: 825, column: 5, }, end: Position { line: 825, column: 13, }, }, }, ), Raw( PartRaw { content: "pam", span: Span { start: Position { line: 825, column: 14, }, end: Position { line: 825, column: 17, }, }, }, ), Raw( PartRaw { content: "enableOTPW", span: Span { start: Position { line: 825, column: 18, }, end: Position { line: 825, column: 28, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "mkEnableOption", span: Span { start: Position { line: 825, column: 31, }, end: Position { line: 825, column: 45, }, }, }, ), arguments: [ FunctionApplication( FunctionApplication { function: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "lib", span: Span { start: Position { line: 825, column: 47, }, end: Position { line: 825, column: 50, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "mdDoc", span: Span { start: Position { line: 825, column: 51, }, end: Position { line: 825, column: 56, }, }, }, ), ], default: None, }, ), arguments: [ String( String_ { parts: [ Raw( PartRaw { content: "the OTPW (one-time password) PAM module", span: Span { start: Position { line: 825, column: 58, }, end: Position { line: 825, column: 97, }, }, }, ), ], span: Span { start: Position { line: 825, column: 57, }, end: Position { line: 825, column: 98, }, }, }, ), ], }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "security", span: Span { start: Position { line: 827, column: 5, }, end: Position { line: 827, column: 13, }, }, }, ), Raw( PartRaw { content: "pam", span: Span { start: Position { line: 827, column: 14, }, end: Position { line: 827, column: 17, }, }, }, ), Raw( PartRaw { content: "krb5", span: Span { start: Position { line: 827, column: 18, }, end: Position { line: 827, column: 22, }, }, }, ), ], to: Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "enable", span: Span { start: Position { line: 828, column: 7, }, end: Position { line: 828, column: 13, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "mkOption", span: Span { start: Position { line: 828, column: 16, }, end: Position { line: 828, column: 24, }, }, }, ), arguments: [ Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "default", span: Span { start: Position { line: 829, column: 9, }, end: Position { line: 829, column: 16, }, }, }, ), ], to: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "config", span: Span { start: Position { line: 829, column: 19, }, end: Position { line: 829, column: 25, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "krb5", span: Span { start: Position { line: 829, column: 26, }, end: Position { line: 829, column: 30, }, }, }, ), Raw( PartRaw { content: "enable", span: Span { start: Position { line: 829, column: 31, }, end: Position { line: 829, column: 37, }, }, }, ), ], default: None, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "defaultText", span: Span { start: Position { line: 830, column: 9, }, end: Position { line: 830, column: 20, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "literalExpression", span: Span { start: Position { line: 830, column: 23, }, end: Position { line: 830, column: 40, }, }, }, ), arguments: [ String( String_ { parts: [ Raw( PartRaw { content: "config.krb5.enable", span: Span { start: Position { line: 830, column: 42, }, end: Position { line: 830, column: 60, }, }, }, ), ], span: Span { start: Position { line: 830, column: 41, }, end: Position { line: 830, column: 61, }, }, }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "type", span: Span { start: Position { line: 831, column: 9, }, end: Position { line: 831, column: 13, }, }, }, ), ], to: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "types", span: Span { start: Position { line: 831, column: 16, }, end: Position { line: 831, column: 21, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "bool", span: Span { start: Position { line: 831, column: 22, }, end: Position { line: 831, column: 26, }, }, }, ), ], default: None, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "description", span: Span { start: Position { line: 832, column: 9, }, end: Position { line: 832, column: 20, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "lib", span: Span { start: Position { line: 832, column: 23, }, end: Position { line: 832, column: 26, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "mdDoc", span: Span { start: Position { line: 832, column: 27, }, end: Position { line: 832, column: 32, }, }, }, ), ], default: None, }, ), arguments: [ IndentedString( IndentedString { parts: [ Raw( PartRaw { content: "Enables Kerberos PAM modules (`pam-krb5`,\n`pam-ccreds`).\n\nIf set, users can authenticate with their Kerberos password.\nThis requires a valid Kerberos configuration\n(`config.krb5.enable` should be set to\n`true`).\n\nNote that the Kerberos PAM modules are not necessary when using SSS\nto handle Kerberos authentication.\n", span: Span { start: Position { line: 833, column: 1, }, end: Position { line: 843, column: 9, }, }, }, ), ], span: Span { start: Position { line: 832, column: 33, }, end: Position { line: 843, column: 11, }, }, }, ), ], }, ), }, ), ], span: Span { start: Position { line: 828, column: 25, }, end: Position { line: 844, column: 8, }, }, }, ), ], }, ), }, ), ], span: Span { start: Position { line: 827, column: 25, }, end: Position { line: 845, column: 6, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "security", span: Span { start: Position { line: 847, column: 5, }, end: Position { line: 847, column: 13, }, }, }, ), Raw( PartRaw { content: "pam", span: Span { start: Position { line: 847, column: 14, }, end: Position { line: 847, column: 17, }, }, }, ), Raw( PartRaw { content: "p11", span: Span { start: Position { line: 847, column: 18, }, end: Position { line: 847, column: 21, }, }, }, ), ], to: Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "enable", span: Span { start: Position { line: 848, column: 7, }, end: Position { line: 848, column: 13, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "mkOption", span: Span { start: Position { line: 848, column: 16, }, end: Position { line: 848, column: 24, }, }, }, ), arguments: [ Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "default", span: Span { start: Position { line: 849, column: 9, }, end: Position { line: 849, column: 16, }, }, }, ), ], to: Identifier( Identifier { id: "false", span: Span { start: Position { line: 849, column: 19, }, end: Position { line: 849, column: 24, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "type", span: Span { start: Position { line: 850, column: 9, }, end: Position { line: 850, column: 13, }, }, }, ), ], to: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "types", span: Span { start: Position { line: 850, column: 16, }, end: Position { line: 850, column: 21, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "bool", span: Span { start: Position { line: 850, column: 22, }, end: Position { line: 850, column: 26, }, }, }, ), ], default: None, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "description", span: Span { start: Position { line: 851, column: 9, }, end: Position { line: 851, column: 20, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "lib", span: Span { start: Position { line: 851, column: 23, }, end: Position { line: 851, column: 26, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "mdDoc", span: Span { start: Position { line: 851, column: 27, }, end: Position { line: 851, column: 32, }, }, }, ), ], default: None, }, ), arguments: [ IndentedString( IndentedString { parts: [ Raw( PartRaw { content: "Enables P11 PAM (`pam_p11`) module.\n\nIf set, users can log in with SSH keys and PKCS#11 tokens.\n\nMore information can be found [here](https://github.com/OpenSC/pam_p11).\n", span: Span { start: Position { line: 852, column: 1, }, end: Position { line: 857, column: 9, }, }, }, ), ], span: Span { start: Position { line: 851, column: 33, }, end: Position { line: 857, column: 11, }, }, }, ), ], }, ), }, ), ], span: Span { start: Position { line: 848, column: 25, }, end: Position { line: 858, column: 8, }, }, }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "control", span: Span { start: Position { line: 860, column: 7, }, end: Position { line: 860, column: 14, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "mkOption", span: Span { start: Position { line: 860, column: 17, }, end: Position { line: 860, column: 25, }, }, }, ), arguments: [ Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "default", span: Span { start: Position { line: 861, column: 9, }, end: Position { line: 861, column: 16, }, }, }, ), ], to: String( String_ { parts: [ Raw( PartRaw { content: "sufficient", span: Span { start: Position { line: 861, column: 20, }, end: Position { line: 861, column: 30, }, }, }, ), ], span: Span { start: Position { line: 861, column: 19, }, end: Position { line: 861, column: 31, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "type", span: Span { start: Position { line: 862, column: 9, }, end: Position { line: 862, column: 13, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "types", span: Span { start: Position { line: 862, column: 16, }, end: Position { line: 862, column: 21, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "enum", span: Span { start: Position { line: 862, column: 22, }, end: Position { line: 862, column: 26, }, }, }, ), ], default: None, }, ), arguments: [ List( List { elements: [ String( String_ { parts: [ Raw( PartRaw { content: "required", span: Span { start: Position { line: 862, column: 30, }, end: Position { line: 862, column: 38, }, }, }, ), ], span: Span { start: Position { line: 862, column: 29, }, end: Position { line: 862, column: 39, }, }, }, ), String( String_ { parts: [ Raw( PartRaw { content: "requisite", span: Span { start: Position { line: 862, column: 41, }, end: Position { line: 862, column: 50, }, }, }, ), ], span: Span { start: Position { line: 862, column: 40, }, end: Position { line: 862, column: 51, }, }, }, ), String( String_ { parts: [ Raw( PartRaw { content: "sufficient", span: Span { start: Position { line: 862, column: 53, }, end: Position { line: 862, column: 63, }, }, }, ), ], span: Span { start: Position { line: 862, column: 52, }, end: Position { line: 862, column: 64, }, }, }, ), String( String_ { parts: [ Raw( PartRaw { content: "optional", span: Span { start: Position { line: 862, column: 66, }, end: Position { line: 862, column: 74, }, }, }, ), ], span: Span { start: Position { line: 862, column: 65, }, end: Position { line: 862, column: 75, }, }, }, ), ], span: Span { start: Position { line: 862, column: 27, }, end: Position { line: 862, column: 77, }, }, }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "description", span: Span { start: Position { line: 863, column: 9, }, end: Position { line: 863, column: 20, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "lib", span: Span { start: Position { line: 863, column: 23, }, end: Position { line: 863, column: 26, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "mdDoc", span: Span { start: Position { line: 863, column: 27, }, end: Position { line: 863, column: 32, }, }, }, ), ], default: None, }, ), arguments: [ IndentedString( IndentedString { parts: [ Raw( PartRaw { content: "This option sets pam \"control\".\nIf you want to have multi factor authentication, use \"required\".\nIf you want to use the PKCS#11 device instead of the regular password,\nuse \"sufficient\".\n\nRead\n{manpage}`pam.conf(5)`\nfor better understanding of this option.\n", span: Span { start: Position { line: 864, column: 1, }, end: Position { line: 872, column: 9, }, }, }, ), ], span: Span { start: Position { line: 863, column: 33, }, end: Position { line: 872, column: 11, }, }, }, ), ], }, ), }, ), ], span: Span { start: Position { line: 860, column: 26, }, end: Position { line: 873, column: 8, }, }, }, ), ], }, ), }, ), ], span: Span { start: Position { line: 847, column: 24, }, end: Position { line: 874, column: 6, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "security", span: Span { start: Position { line: 876, column: 5, }, end: Position { line: 876, column: 13, }, }, }, ), Raw( PartRaw { content: "pam", span: Span { start: Position { line: 876, column: 14, }, end: Position { line: 876, column: 17, }, }, }, ), Raw( PartRaw { content: "u2f", span: Span { start: Position { line: 876, column: 18, }, end: Position { line: 876, column: 21, }, }, }, ), ], to: Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "enable", span: Span { start: Position { line: 877, column: 7, }, end: Position { line: 877, column: 13, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "mkOption", span: Span { start: Position { line: 877, column: 16, }, end: Position { line: 877, column: 24, }, }, }, ), arguments: [ Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "default", span: Span { start: Position { line: 878, column: 9, }, end: Position { line: 878, column: 16, }, }, }, ), ], to: Identifier( Identifier { id: "false", span: Span { start: Position { line: 878, column: 19, }, end: Position { line: 878, column: 24, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "type", span: Span { start: Position { line: 879, column: 9, }, end: Position { line: 879, column: 13, }, }, }, ), ], to: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "types", span: Span { start: Position { line: 879, column: 16, }, end: Position { line: 879, column: 21, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "bool", span: Span { start: Position { line: 879, column: 22, }, end: Position { line: 879, column: 26, }, }, }, ), ], default: None, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "description", span: Span { start: Position { line: 880, column: 9, }, end: Position { line: 880, column: 20, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "lib", span: Span { start: Position { line: 880, column: 23, }, end: Position { line: 880, column: 26, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "mdDoc", span: Span { start: Position { line: 880, column: 27, }, end: Position { line: 880, column: 32, }, }, }, ), ], default: None, }, ), arguments: [ IndentedString( IndentedString { parts: [ Raw( PartRaw { content: "Enables U2F PAM (`pam-u2f`) module.\n\nIf set, users listed in\n{file}`$XDG_CONFIG_HOME/Yubico/u2f_keys` (or\n{file}`$HOME/.config/Yubico/u2f_keys` if XDG variable is\nnot set) are able to log in with the associated U2F key. The path can\nbe changed using {option}`security.pam.u2f.authFile` option.\n\nFile format is:\n`username:first_keyHandle,first_public_key: second_keyHandle,second_public_key`\nThis file can be generated using {command}`pamu2fcfg` command.\n\nMore information can be found [here](https://developers.yubico.com/pam-u2f/).\n", span: Span { start: Position { line: 881, column: 1, }, end: Position { line: 894, column: 9, }, }, }, ), ], span: Span { start: Position { line: 880, column: 33, }, end: Position { line: 894, column: 11, }, }, }, ), ], }, ), }, ), ], span: Span { start: Position { line: 877, column: 25, }, end: Position { line: 895, column: 8, }, }, }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "authFile", span: Span { start: Position { line: 897, column: 7, }, end: Position { line: 897, column: 15, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "mkOption", span: Span { start: Position { line: 897, column: 18, }, end: Position { line: 897, column: 26, }, }, }, ), arguments: [ Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "default", span: Span { start: Position { line: 898, column: 9, }, end: Position { line: 898, column: 16, }, }, }, ), ], to: Identifier( Identifier { id: "null", span: Span { start: Position { line: 898, column: 19, }, end: Position { line: 898, column: 23, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "type", span: Span { start: Position { line: 899, column: 9, }, end: Position { line: 899, column: 13, }, }, }, ), ], to: With( With { expression: Identifier( Identifier { id: "types", span: Span { start: Position { line: 899, column: 21, }, end: Position { line: 899, column: 26, }, }, }, ), target: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "nullOr", span: Span { start: Position { line: 899, column: 28, }, end: Position { line: 899, column: 34, }, }, }, ), arguments: [ Identifier( Identifier { id: "path", span: Span { start: Position { line: 899, column: 35, }, end: Position { line: 899, column: 39, }, }, }, ), ], }, ), span: Span { start: Position { line: 899, column: 16, }, end: Position { line: 899, column: 39, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "description", span: Span { start: Position { line: 900, column: 9, }, end: Position { line: 900, column: 20, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "lib", span: Span { start: Position { line: 900, column: 23, }, end: Position { line: 900, column: 26, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "mdDoc", span: Span { start: Position { line: 900, column: 27, }, end: Position { line: 900, column: 32, }, }, }, ), ], default: None, }, ), arguments: [ IndentedString( IndentedString { parts: [ Raw( PartRaw { content: "By default `pam-u2f` module reads the keys from\n{file}`$XDG_CONFIG_HOME/Yubico/u2f_keys` (or\n{file}`$HOME/.config/Yubico/u2f_keys` if XDG variable is\nnot set).\n\nIf you want to change auth file locations or centralize database (for\nexample use {file}`/etc/u2f-mappings`) you can set this\noption.\n\nFile format is:\n`username:first_keyHandle,first_public_key: second_keyHandle,second_public_key`\nThis file can be generated using {command}`pamu2fcfg` command.\n\nMore information can be found [here](https://developers.yubico.com/pam-u2f/).\n", span: Span { start: Position { line: 901, column: 1, }, end: Position { line: 915, column: 9, }, }, }, ), ], span: Span { start: Position { line: 900, column: 33, }, end: Position { line: 915, column: 11, }, }, }, ), ], }, ), }, ), ], span: Span { start: Position { line: 897, column: 27, }, end: Position { line: 916, column: 8, }, }, }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "appId", span: Span { start: Position { line: 918, column: 7, }, end: Position { line: 918, column: 12, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "mkOption", span: Span { start: Position { line: 918, column: 15, }, end: Position { line: 918, column: 23, }, }, }, ), arguments: [ Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "default", span: Span { start: Position { line: 919, column: 9, }, end: Position { line: 919, column: 16, }, }, }, ), ], to: Identifier( Identifier { id: "null", span: Span { start: Position { line: 919, column: 19, }, end: Position { line: 919, column: 23, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "type", span: Span { start: Position { line: 920, column: 9, }, end: Position { line: 920, column: 13, }, }, }, ), ], to: With( With { expression: Identifier( Identifier { id: "types", span: Span { start: Position { line: 920, column: 21, }, end: Position { line: 920, column: 26, }, }, }, ), target: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "nullOr", span: Span { start: Position { line: 920, column: 28, }, end: Position { line: 920, column: 34, }, }, }, ), arguments: [ Identifier( Identifier { id: "str", span: Span { start: Position { line: 920, column: 35, }, end: Position { line: 920, column: 38, }, }, }, ), ], }, ), span: Span { start: Position { line: 920, column: 16, }, end: Position { line: 920, column: 38, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "description", span: Span { start: Position { line: 921, column: 9, }, end: Position { line: 921, column: 20, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "lib", span: Span { start: Position { line: 921, column: 23, }, end: Position { line: 921, column: 26, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "mdDoc", span: Span { start: Position { line: 921, column: 27, }, end: Position { line: 921, column: 32, }, }, }, ), ], default: None, }, ), arguments: [ IndentedString( IndentedString { parts: [ Raw( PartRaw { content: "By default `pam-u2f` module sets the application\nID to `pam://$HOSTNAME`.\n\nWhen using {command}`pamu2fcfg`, you can specify your\napplication ID with the `-i` flag.\n\nMore information can be found [here](https://developers.yubico.com/pam-u2f/Manuals/pam_u2f.8.html)\n", span: Span { start: Position { line: 922, column: 1, }, end: Position { line: 929, column: 9, }, }, }, ), ], span: Span { start: Position { line: 921, column: 33, }, end: Position { line: 929, column: 11, }, }, }, ), ], }, ), }, ), ], span: Span { start: Position { line: 918, column: 24, }, end: Position { line: 930, column: 8, }, }, }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "origin", span: Span { start: Position { line: 932, column: 7, }, end: Position { line: 932, column: 13, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "mkOption", span: Span { start: Position { line: 932, column: 16, }, end: Position { line: 932, column: 24, }, }, }, ), arguments: [ Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "default", span: Span { start: Position { line: 933, column: 9, }, end: Position { line: 933, column: 16, }, }, }, ), ], to: Identifier( Identifier { id: "null", span: Span { start: Position { line: 933, column: 19, }, end: Position { line: 933, column: 23, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "type", span: Span { start: Position { line: 934, column: 9, }, end: Position { line: 934, column: 13, }, }, }, ), ], to: With( With { expression: Identifier( Identifier { id: "types", span: Span { start: Position { line: 934, column: 21, }, end: Position { line: 934, column: 26, }, }, }, ), target: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "nullOr", span: Span { start: Position { line: 934, column: 28, }, end: Position { line: 934, column: 34, }, }, }, ), arguments: [ Identifier( Identifier { id: "str", span: Span { start: Position { line: 934, column: 35, }, end: Position { line: 934, column: 38, }, }, }, ), ], }, ), span: Span { start: Position { line: 934, column: 16, }, end: Position { line: 934, column: 38, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "description", span: Span { start: Position { line: 935, column: 9, }, end: Position { line: 935, column: 20, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "lib", span: Span { start: Position { line: 935, column: 23, }, end: Position { line: 935, column: 26, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "mdDoc", span: Span { start: Position { line: 935, column: 27, }, end: Position { line: 935, column: 32, }, }, }, ), ], default: None, }, ), arguments: [ IndentedString( IndentedString { parts: [ Raw( PartRaw { content: "By default `pam-u2f` module sets the origin\nto `pam://$HOSTNAME`.\nSetting origin to an host independent value will allow you to\nreuse credentials across machines\n\nWhen using {command}`pamu2fcfg`, you can specify your\napplication ID with the `-o` flag.\n\nMore information can be found [here](https://developers.yubico.com/pam-u2f/Manuals/pam_u2f.8.html)\n", span: Span { start: Position { line: 936, column: 1, }, end: Position { line: 945, column: 9, }, }, }, ), ], span: Span { start: Position { line: 935, column: 33, }, end: Position { line: 945, column: 11, }, }, }, ), ], }, ), }, ), ], span: Span { start: Position { line: 932, column: 25, }, end: Position { line: 946, column: 8, }, }, }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "control", span: Span { start: Position { line: 948, column: 7, }, end: Position { line: 948, column: 14, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "mkOption", span: Span { start: Position { line: 948, column: 17, }, end: Position { line: 948, column: 25, }, }, }, ), arguments: [ Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "default", span: Span { start: Position { line: 949, column: 9, }, end: Position { line: 949, column: 16, }, }, }, ), ], to: String( String_ { parts: [ Raw( PartRaw { content: "sufficient", span: Span { start: Position { line: 949, column: 20, }, end: Position { line: 949, column: 30, }, }, }, ), ], span: Span { start: Position { line: 949, column: 19, }, end: Position { line: 949, column: 31, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "type", span: Span { start: Position { line: 950, column: 9, }, end: Position { line: 950, column: 13, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "types", span: Span { start: Position { line: 950, column: 16, }, end: Position { line: 950, column: 21, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "enum", span: Span { start: Position { line: 950, column: 22, }, end: Position { line: 950, column: 26, }, }, }, ), ], default: None, }, ), arguments: [ List( List { elements: [ String( String_ { parts: [ Raw( PartRaw { content: "required", span: Span { start: Position { line: 950, column: 30, }, end: Position { line: 950, column: 38, }, }, }, ), ], span: Span { start: Position { line: 950, column: 29, }, end: Position { line: 950, column: 39, }, }, }, ), String( String_ { parts: [ Raw( PartRaw { content: "requisite", span: Span { start: Position { line: 950, column: 41, }, end: Position { line: 950, column: 50, }, }, }, ), ], span: Span { start: Position { line: 950, column: 40, }, end: Position { line: 950, column: 51, }, }, }, ), String( String_ { parts: [ Raw( PartRaw { content: "sufficient", span: Span { start: Position { line: 950, column: 53, }, end: Position { line: 950, column: 63, }, }, }, ), ], span: Span { start: Position { line: 950, column: 52, }, end: Position { line: 950, column: 64, }, }, }, ), String( String_ { parts: [ Raw( PartRaw { content: "optional", span: Span { start: Position { line: 950, column: 66, }, end: Position { line: 950, column: 74, }, }, }, ), ], span: Span { start: Position { line: 950, column: 65, }, end: Position { line: 950, column: 75, }, }, }, ), ], span: Span { start: Position { line: 950, column: 27, }, end: Position { line: 950, column: 77, }, }, }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "description", span: Span { start: Position { line: 951, column: 9, }, end: Position { line: 951, column: 20, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "lib", span: Span { start: Position { line: 951, column: 23, }, end: Position { line: 951, column: 26, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "mdDoc", span: Span { start: Position { line: 951, column: 27, }, end: Position { line: 951, column: 32, }, }, }, ), ], default: None, }, ), arguments: [ IndentedString( IndentedString { parts: [ Raw( PartRaw { content: "This option sets pam \"control\".\nIf you want to have multi factor authentication, use \"required\".\nIf you want to use U2F device instead of regular password, use \"sufficient\".\n\nRead\n{manpage}`pam.conf(5)`\nfor better understanding of this option.\n", span: Span { start: Position { line: 952, column: 1, }, end: Position { line: 959, column: 9, }, }, }, ), ], span: Span { start: Position { line: 951, column: 33, }, end: Position { line: 959, column: 11, }, }, }, ), ], }, ), }, ), ], span: Span { start: Position { line: 948, column: 26, }, end: Position { line: 960, column: 8, }, }, }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "debug", span: Span { start: Position { line: 962, column: 7, }, end: Position { line: 962, column: 12, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "mkOption", span: Span { start: Position { line: 962, column: 15, }, end: Position { line: 962, column: 23, }, }, }, ), arguments: [ Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "default", span: Span { start: Position { line: 963, column: 9, }, end: Position { line: 963, column: 16, }, }, }, ), ], to: Identifier( Identifier { id: "false", span: Span { start: Position { line: 963, column: 19, }, end: Position { line: 963, column: 24, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "type", span: Span { start: Position { line: 964, column: 9, }, end: Position { line: 964, column: 13, }, }, }, ), ], to: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "types", span: Span { start: Position { line: 964, column: 16, }, end: Position { line: 964, column: 21, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "bool", span: Span { start: Position { line: 964, column: 22, }, end: Position { line: 964, column: 26, }, }, }, ), ], default: None, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "description", span: Span { start: Position { line: 965, column: 9, }, end: Position { line: 965, column: 20, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "lib", span: Span { start: Position { line: 965, column: 23, }, end: Position { line: 965, column: 26, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "mdDoc", span: Span { start: Position { line: 965, column: 27, }, end: Position { line: 965, column: 32, }, }, }, ), ], default: None, }, ), arguments: [ IndentedString( IndentedString { parts: [ Raw( PartRaw { content: "Debug output to stderr.\n", span: Span { start: Position { line: 966, column: 1, }, end: Position { line: 967, column: 9, }, }, }, ), ], span: Span { start: Position { line: 965, column: 33, }, end: Position { line: 967, column: 11, }, }, }, ), ], }, ), }, ), ], span: Span { start: Position { line: 962, column: 24, }, end: Position { line: 968, column: 8, }, }, }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "interactive", span: Span { start: Position { line: 970, column: 7, }, end: Position { line: 970, column: 18, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "mkOption", span: Span { start: Position { line: 970, column: 21, }, end: Position { line: 970, column: 29, }, }, }, ), arguments: [ Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "default", span: Span { start: Position { line: 971, column: 9, }, end: Position { line: 971, column: 16, }, }, }, ), ], to: Identifier( Identifier { id: "false", span: Span { start: Position { line: 971, column: 19, }, end: Position { line: 971, column: 24, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "type", span: Span { start: Position { line: 972, column: 9, }, end: Position { line: 972, column: 13, }, }, }, ), ], to: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "types", span: Span { start: Position { line: 972, column: 16, }, end: Position { line: 972, column: 21, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "bool", span: Span { start: Position { line: 972, column: 22, }, end: Position { line: 972, column: 26, }, }, }, ), ], default: None, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "description", span: Span { start: Position { line: 973, column: 9, }, end: Position { line: 973, column: 20, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "lib", span: Span { start: Position { line: 973, column: 23, }, end: Position { line: 973, column: 26, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "mdDoc", span: Span { start: Position { line: 973, column: 27, }, end: Position { line: 973, column: 32, }, }, }, ), ], default: None, }, ), arguments: [ IndentedString( IndentedString { parts: [ Raw( PartRaw { content: "Set to prompt a message and wait before testing the presence of a U2F device.\nRecommended if your device doesn’t have a tactile trigger.\n", span: Span { start: Position { line: 974, column: 1, }, end: Position { line: 976, column: 9, }, }, }, ), ], span: Span { start: Position { line: 973, column: 33, }, end: Position { line: 976, column: 11, }, }, }, ), ], }, ), }, ), ], span: Span { start: Position { line: 970, column: 30, }, end: Position { line: 977, column: 8, }, }, }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "cue", span: Span { start: Position { line: 979, column: 7, }, end: Position { line: 979, column: 10, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "mkOption", span: Span { start: Position { line: 979, column: 13, }, end: Position { line: 979, column: 21, }, }, }, ), arguments: [ Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "default", span: Span { start: Position { line: 980, column: 9, }, end: Position { line: 980, column: 16, }, }, }, ), ], to: Identifier( Identifier { id: "false", span: Span { start: Position { line: 980, column: 19, }, end: Position { line: 980, column: 24, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "type", span: Span { start: Position { line: 981, column: 9, }, end: Position { line: 981, column: 13, }, }, }, ), ], to: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "types", span: Span { start: Position { line: 981, column: 16, }, end: Position { line: 981, column: 21, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "bool", span: Span { start: Position { line: 981, column: 22, }, end: Position { line: 981, column: 26, }, }, }, ), ], default: None, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "description", span: Span { start: Position { line: 982, column: 9, }, end: Position { line: 982, column: 20, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "lib", span: Span { start: Position { line: 982, column: 23, }, end: Position { line: 982, column: 26, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "mdDoc", span: Span { start: Position { line: 982, column: 27, }, end: Position { line: 982, column: 32, }, }, }, ), ], default: None, }, ), arguments: [ IndentedString( IndentedString { parts: [ Raw( PartRaw { content: "By default `pam-u2f` module does not inform user\nthat he needs to use the u2f device, it just waits without a prompt.\n\nIf you set this option to `true`,\n`cue` option is added to `pam-u2f`\nmodule and reminder message will be displayed.\n", span: Span { start: Position { line: 983, column: 1, }, end: Position { line: 989, column: 9, }, }, }, ), ], span: Span { start: Position { line: 982, column: 33, }, end: Position { line: 989, column: 11, }, }, }, ), ], }, ), }, ), ], span: Span { start: Position { line: 979, column: 22, }, end: Position { line: 990, column: 8, }, }, }, ), ], }, ), }, ), ], span: Span { start: Position { line: 876, column: 24, }, end: Position { line: 991, column: 6, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "security", span: Span { start: Position { line: 993, column: 5, }, end: Position { line: 993, column: 13, }, }, }, ), Raw( PartRaw { content: "pam", span: Span { start: Position { line: 993, column: 14, }, end: Position { line: 993, column: 17, }, }, }, ), Raw( PartRaw { content: "ussh", span: Span { start: Position { line: 993, column: 18, }, end: Position { line: 993, column: 22, }, }, }, ), ], to: Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "enable", span: Span { start: Position { line: 994, column: 7, }, end: Position { line: 994, column: 13, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "mkOption", span: Span { start: Position { line: 994, column: 16, }, end: Position { line: 994, column: 24, }, }, }, ), arguments: [ Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "default", span: Span { start: Position { line: 995, column: 9, }, end: Position { line: 995, column: 16, }, }, }, ), ], to: Identifier( Identifier { id: "false", span: Span { start: Position { line: 995, column: 19, }, end: Position { line: 995, column: 24, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "type", span: Span { start: Position { line: 996, column: 9, }, end: Position { line: 996, column: 13, }, }, }, ), ], to: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "types", span: Span { start: Position { line: 996, column: 16, }, end: Position { line: 996, column: 21, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "bool", span: Span { start: Position { line: 996, column: 22, }, end: Position { line: 996, column: 26, }, }, }, ), ], default: None, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "description", span: Span { start: Position { line: 997, column: 9, }, end: Position { line: 997, column: 20, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "lib", span: Span { start: Position { line: 997, column: 23, }, end: Position { line: 997, column: 26, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "mdDoc", span: Span { start: Position { line: 997, column: 27, }, end: Position { line: 997, column: 32, }, }, }, ), ], default: None, }, ), arguments: [ IndentedString( IndentedString { parts: [ Raw( PartRaw { content: "Enables Uber's USSH PAM (`pam-ussh`) module.\n\nThis is similar to `pam-ssh-agent`, except that\nthe presence of a CA-signed SSH key with a valid principal is checked\ninstead.\n\nNote that this module must both be enabled using this option and on a\nper-PAM-service level as well (using `usshAuth`).\n\nMore information can be found [here](https://github.com/uber/pam-ussh).\n", span: Span { start: Position { line: 998, column: 1, }, end: Position { line: 1008, column: 9, }, }, }, ), ], span: Span { start: Position { line: 997, column: 33, }, end: Position { line: 1008, column: 11, }, }, }, ), ], }, ), }, ), ], span: Span { start: Position { line: 994, column: 25, }, end: Position { line: 1009, column: 8, }, }, }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "caFile", span: Span { start: Position { line: 1011, column: 7, }, end: Position { line: 1011, column: 13, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "mkOption", span: Span { start: Position { line: 1011, column: 16, }, end: Position { line: 1011, column: 24, }, }, }, ), arguments: [ Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "default", span: Span { start: Position { line: 1012, column: 9, }, end: Position { line: 1012, column: 16, }, }, }, ), ], to: Identifier( Identifier { id: "null", span: Span { start: Position { line: 1012, column: 19, }, end: Position { line: 1012, column: 23, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "type", span: Span { start: Position { line: 1013, column: 9, }, end: Position { line: 1013, column: 13, }, }, }, ), ], to: With( With { expression: Identifier( Identifier { id: "types", span: Span { start: Position { line: 1013, column: 21, }, end: Position { line: 1013, column: 26, }, }, }, ), target: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "nullOr", span: Span { start: Position { line: 1013, column: 28, }, end: Position { line: 1013, column: 34, }, }, }, ), arguments: [ Identifier( Identifier { id: "path", span: Span { start: Position { line: 1013, column: 35, }, end: Position { line: 1013, column: 39, }, }, }, ), ], }, ), span: Span { start: Position { line: 1013, column: 16, }, end: Position { line: 1013, column: 39, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "description", span: Span { start: Position { line: 1014, column: 9, }, end: Position { line: 1014, column: 20, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "lib", span: Span { start: Position { line: 1014, column: 23, }, end: Position { line: 1014, column: 26, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "mdDoc", span: Span { start: Position { line: 1014, column: 27, }, end: Position { line: 1014, column: 32, }, }, }, ), ], default: None, }, ), arguments: [ IndentedString( IndentedString { parts: [ Raw( PartRaw { content: "By default `pam-ussh` reads the trusted user CA keys\nfrom {file}`/etc/ssh/trusted_user_ca`.\n\nThis should be set the same as your `TrustedUserCAKeys`\noption for sshd.\n", span: Span { start: Position { line: 1015, column: 1, }, end: Position { line: 1020, column: 9, }, }, }, ), ], span: Span { start: Position { line: 1014, column: 33, }, end: Position { line: 1020, column: 11, }, }, }, ), ], }, ), }, ), ], span: Span { start: Position { line: 1011, column: 25, }, end: Position { line: 1021, column: 8, }, }, }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "authorizedPrincipals", span: Span { start: Position { line: 1023, column: 7, }, end: Position { line: 1023, column: 27, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "mkOption", span: Span { start: Position { line: 1023, column: 30, }, end: Position { line: 1023, column: 38, }, }, }, ), arguments: [ Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "default", span: Span { start: Position { line: 1024, column: 9, }, end: Position { line: 1024, column: 16, }, }, }, ), ], to: Identifier( Identifier { id: "null", span: Span { start: Position { line: 1024, column: 19, }, end: Position { line: 1024, column: 23, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "type", span: Span { start: Position { line: 1025, column: 9, }, end: Position { line: 1025, column: 13, }, }, }, ), ], to: With( With { expression: Identifier( Identifier { id: "types", span: Span { start: Position { line: 1025, column: 21, }, end: Position { line: 1025, column: 26, }, }, }, ), target: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "nullOr", span: Span { start: Position { line: 1025, column: 28, }, end: Position { line: 1025, column: 34, }, }, }, ), arguments: [ Identifier( Identifier { id: "commas", span: Span { start: Position { line: 1025, column: 35, }, end: Position { line: 1025, column: 41, }, }, }, ), ], }, ), span: Span { start: Position { line: 1025, column: 16, }, end: Position { line: 1025, column: 41, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "description", span: Span { start: Position { line: 1026, column: 9, }, end: Position { line: 1026, column: 20, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "lib", span: Span { start: Position { line: 1026, column: 23, }, end: Position { line: 1026, column: 26, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "mdDoc", span: Span { start: Position { line: 1026, column: 27, }, end: Position { line: 1026, column: 32, }, }, }, ), ], default: None, }, ), arguments: [ IndentedString( IndentedString { parts: [ Raw( PartRaw { content: "Comma-separated list of authorized principals to permit; if the user\npresents a certificate with one of these principals, then they will be\nauthorized.\n\nNote that `pam-ussh` also requires that the certificate\ncontain a principal matching the user's username. The principals from\nthis list are in addition to those principals.\n\nMutually exclusive with `authorizedPrincipalsFile`.\n", span: Span { start: Position { line: 1027, column: 1, }, end: Position { line: 1036, column: 9, }, }, }, ), ], span: Span { start: Position { line: 1026, column: 33, }, end: Position { line: 1036, column: 11, }, }, }, ), ], }, ), }, ), ], span: Span { start: Position { line: 1023, column: 39, }, end: Position { line: 1037, column: 8, }, }, }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "authorizedPrincipalsFile", span: Span { start: Position { line: 1039, column: 7, }, end: Position { line: 1039, column: 31, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "mkOption", span: Span { start: Position { line: 1039, column: 34, }, end: Position { line: 1039, column: 42, }, }, }, ), arguments: [ Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "default", span: Span { start: Position { line: 1040, column: 9, }, end: Position { line: 1040, column: 16, }, }, }, ), ], to: Identifier( Identifier { id: "null", span: Span { start: Position { line: 1040, column: 19, }, end: Position { line: 1040, column: 23, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "type", span: Span { start: Position { line: 1041, column: 9, }, end: Position { line: 1041, column: 13, }, }, }, ), ], to: With( With { expression: Identifier( Identifier { id: "types", span: Span { start: Position { line: 1041, column: 21, }, end: Position { line: 1041, column: 26, }, }, }, ), target: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "nullOr", span: Span { start: Position { line: 1041, column: 28, }, end: Position { line: 1041, column: 34, }, }, }, ), arguments: [ Identifier( Identifier { id: "path", span: Span { start: Position { line: 1041, column: 35, }, end: Position { line: 1041, column: 39, }, }, }, ), ], }, ), span: Span { start: Position { line: 1041, column: 16, }, end: Position { line: 1041, column: 39, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "description", span: Span { start: Position { line: 1042, column: 9, }, end: Position { line: 1042, column: 20, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "lib", span: Span { start: Position { line: 1042, column: 23, }, end: Position { line: 1042, column: 26, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "mdDoc", span: Span { start: Position { line: 1042, column: 27, }, end: Position { line: 1042, column: 32, }, }, }, ), ], default: None, }, ), arguments: [ IndentedString( IndentedString { parts: [ Raw( PartRaw { content: "Path to a list of principals; if the user presents a certificate with\none of these principals, then they will be authorized.\n\nNote that `pam-ussh` also requires that the certificate\ncontain a principal matching the user's username. The principals from\nthis file are in addition to those principals.\n\nMutually exclusive with `authorizedPrincipals`.\n", span: Span { start: Position { line: 1043, column: 1, }, end: Position { line: 1051, column: 9, }, }, }, ), ], span: Span { start: Position { line: 1042, column: 33, }, end: Position { line: 1051, column: 11, }, }, }, ), ], }, ), }, ), ], span: Span { start: Position { line: 1039, column: 43, }, end: Position { line: 1052, column: 8, }, }, }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "group", span: Span { start: Position { line: 1054, column: 7, }, end: Position { line: 1054, column: 12, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "mkOption", span: Span { start: Position { line: 1054, column: 15, }, end: Position { line: 1054, column: 23, }, }, }, ), arguments: [ Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "default", span: Span { start: Position { line: 1055, column: 9, }, end: Position { line: 1055, column: 16, }, }, }, ), ], to: Identifier( Identifier { id: "null", span: Span { start: Position { line: 1055, column: 19, }, end: Position { line: 1055, column: 23, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "type", span: Span { start: Position { line: 1056, column: 9, }, end: Position { line: 1056, column: 13, }, }, }, ), ], to: With( With { expression: Identifier( Identifier { id: "types", span: Span { start: Position { line: 1056, column: 21, }, end: Position { line: 1056, column: 26, }, }, }, ), target: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "nullOr", span: Span { start: Position { line: 1056, column: 28, }, end: Position { line: 1056, column: 34, }, }, }, ), arguments: [ Identifier( Identifier { id: "str", span: Span { start: Position { line: 1056, column: 35, }, end: Position { line: 1056, column: 38, }, }, }, ), ], }, ), span: Span { start: Position { line: 1056, column: 16, }, end: Position { line: 1056, column: 38, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "description", span: Span { start: Position { line: 1057, column: 9, }, end: Position { line: 1057, column: 20, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "lib", span: Span { start: Position { line: 1057, column: 23, }, end: Position { line: 1057, column: 26, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "mdDoc", span: Span { start: Position { line: 1057, column: 27, }, end: Position { line: 1057, column: 32, }, }, }, ), ], default: None, }, ), arguments: [ IndentedString( IndentedString { parts: [ Raw( PartRaw { content: "If set, then the authenticating user must be a member of this group\nto use this module.\n", span: Span { start: Position { line: 1058, column: 1, }, end: Position { line: 1060, column: 9, }, }, }, ), ], span: Span { start: Position { line: 1057, column: 33, }, end: Position { line: 1060, column: 11, }, }, }, ), ], }, ), }, ), ], span: Span { start: Position { line: 1054, column: 24, }, end: Position { line: 1061, column: 8, }, }, }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "control", span: Span { start: Position { line: 1063, column: 7, }, end: Position { line: 1063, column: 14, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "mkOption", span: Span { start: Position { line: 1063, column: 17, }, end: Position { line: 1063, column: 25, }, }, }, ), arguments: [ Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "default", span: Span { start: Position { line: 1064, column: 9, }, end: Position { line: 1064, column: 16, }, }, }, ), ], to: String( String_ { parts: [ Raw( PartRaw { content: "sufficient", span: Span { start: Position { line: 1064, column: 20, }, end: Position { line: 1064, column: 30, }, }, }, ), ], span: Span { start: Position { line: 1064, column: 19, }, end: Position { line: 1064, column: 31, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "type", span: Span { start: Position { line: 1065, column: 9, }, end: Position { line: 1065, column: 13, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "types", span: Span { start: Position { line: 1065, column: 16, }, end: Position { line: 1065, column: 21, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "enum", span: Span { start: Position { line: 1065, column: 22, }, end: Position { line: 1065, column: 26, }, }, }, ), ], default: None, }, ), arguments: [ List( List { elements: [ String( String_ { parts: [ Raw( PartRaw { content: "required", span: Span { start: Position { line: 1065, column: 30, }, end: Position { line: 1065, column: 38, }, }, }, ), ], span: Span { start: Position { line: 1065, column: 29, }, end: Position { line: 1065, column: 39, }, }, }, ), String( String_ { parts: [ Raw( PartRaw { content: "requisite", span: Span { start: Position { line: 1065, column: 41, }, end: Position { line: 1065, column: 50, }, }, }, ), ], span: Span { start: Position { line: 1065, column: 40, }, end: Position { line: 1065, column: 51, }, }, }, ), String( String_ { parts: [ Raw( PartRaw { content: "sufficient", span: Span { start: Position { line: 1065, column: 53, }, end: Position { line: 1065, column: 63, }, }, }, ), ], span: Span { start: Position { line: 1065, column: 52, }, end: Position { line: 1065, column: 64, }, }, }, ), String( String_ { parts: [ Raw( PartRaw { content: "optional", span: Span { start: Position { line: 1065, column: 66, }, end: Position { line: 1065, column: 74, }, }, }, ), ], span: Span { start: Position { line: 1065, column: 65, }, end: Position { line: 1065, column: 75, }, }, }, ), ], span: Span { start: Position { line: 1065, column: 27, }, end: Position { line: 1065, column: 77, }, }, }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "description", span: Span { start: Position { line: 1066, column: 9, }, end: Position { line: 1066, column: 20, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "lib", span: Span { start: Position { line: 1066, column: 23, }, end: Position { line: 1066, column: 26, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "mdDoc", span: Span { start: Position { line: 1066, column: 27, }, end: Position { line: 1066, column: 32, }, }, }, ), ], default: None, }, ), arguments: [ IndentedString( IndentedString { parts: [ Raw( PartRaw { content: "This option sets pam \"control\".\nIf you want to have multi factor authentication, use \"required\".\nIf you want to use the SSH certificate instead of the regular password,\nuse \"sufficient\".\n\nRead\n{manpage}`pam.conf(5)`\nfor better understanding of this option.\n", span: Span { start: Position { line: 1067, column: 1, }, end: Position { line: 1075, column: 9, }, }, }, ), ], span: Span { start: Position { line: 1066, column: 33, }, end: Position { line: 1075, column: 11, }, }, }, ), ], }, ), }, ), ], span: Span { start: Position { line: 1063, column: 26, }, end: Position { line: 1076, column: 8, }, }, }, ), ], }, ), }, ), ], span: Span { start: Position { line: 993, column: 25, }, end: Position { line: 1077, column: 6, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "security", span: Span { start: Position { line: 1079, column: 5, }, end: Position { line: 1079, column: 13, }, }, }, ), Raw( PartRaw { content: "pam", span: Span { start: Position { line: 1079, column: 14, }, end: Position { line: 1079, column: 17, }, }, }, ), Raw( PartRaw { content: "yubico", span: Span { start: Position { line: 1079, column: 18, }, end: Position { line: 1079, column: 24, }, }, }, ), ], to: Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "enable", span: Span { start: Position { line: 1080, column: 7, }, end: Position { line: 1080, column: 13, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "mkOption", span: Span { start: Position { line: 1080, column: 16, }, end: Position { line: 1080, column: 24, }, }, }, ), arguments: [ Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "default", span: Span { start: Position { line: 1081, column: 9, }, end: Position { line: 1081, column: 16, }, }, }, ), ], to: Identifier( Identifier { id: "false", span: Span { start: Position { line: 1081, column: 19, }, end: Position { line: 1081, column: 24, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "type", span: Span { start: Position { line: 1082, column: 9, }, end: Position { line: 1082, column: 13, }, }, }, ), ], to: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "types", span: Span { start: Position { line: 1082, column: 16, }, end: Position { line: 1082, column: 21, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "bool", span: Span { start: Position { line: 1082, column: 22, }, end: Position { line: 1082, column: 26, }, }, }, ), ], default: None, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "description", span: Span { start: Position { line: 1083, column: 9, }, end: Position { line: 1083, column: 20, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "lib", span: Span { start: Position { line: 1083, column: 23, }, end: Position { line: 1083, column: 26, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "mdDoc", span: Span { start: Position { line: 1083, column: 27, }, end: Position { line: 1083, column: 32, }, }, }, ), ], default: None, }, ), arguments: [ IndentedString( IndentedString { parts: [ Raw( PartRaw { content: "Enables Yubico PAM (`yubico-pam`) module.\n\nIf set, users listed in\n{file}`~/.yubico/authorized_yubikeys`\nare able to log in with the associated Yubikey tokens.\n\nThe file must have only one line:\n`username:yubikey_token_id1:yubikey_token_id2`\nMore information can be found [here](https://developers.yubico.com/yubico-pam/).\n", span: Span { start: Position { line: 1084, column: 1, }, end: Position { line: 1093, column: 9, }, }, }, ), ], span: Span { start: Position { line: 1083, column: 33, }, end: Position { line: 1093, column: 11, }, }, }, ), ], }, ), }, ), ], span: Span { start: Position { line: 1080, column: 25, }, end: Position { line: 1094, column: 8, }, }, }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "control", span: Span { start: Position { line: 1095, column: 7, }, end: Position { line: 1095, column: 14, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "mkOption", span: Span { start: Position { line: 1095, column: 17, }, end: Position { line: 1095, column: 25, }, }, }, ), arguments: [ Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "default", span: Span { start: Position { line: 1096, column: 9, }, end: Position { line: 1096, column: 16, }, }, }, ), ], to: String( String_ { parts: [ Raw( PartRaw { content: "sufficient", span: Span { start: Position { line: 1096, column: 20, }, end: Position { line: 1096, column: 30, }, }, }, ), ], span: Span { start: Position { line: 1096, column: 19, }, end: Position { line: 1096, column: 31, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "type", span: Span { start: Position { line: 1097, column: 9, }, end: Position { line: 1097, column: 13, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "types", span: Span { start: Position { line: 1097, column: 16, }, end: Position { line: 1097, column: 21, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "enum", span: Span { start: Position { line: 1097, column: 22, }, end: Position { line: 1097, column: 26, }, }, }, ), ], default: None, }, ), arguments: [ List( List { elements: [ String( String_ { parts: [ Raw( PartRaw { content: "required", span: Span { start: Position { line: 1097, column: 30, }, end: Position { line: 1097, column: 38, }, }, }, ), ], span: Span { start: Position { line: 1097, column: 29, }, end: Position { line: 1097, column: 39, }, }, }, ), String( String_ { parts: [ Raw( PartRaw { content: "requisite", span: Span { start: Position { line: 1097, column: 41, }, end: Position { line: 1097, column: 50, }, }, }, ), ], span: Span { start: Position { line: 1097, column: 40, }, end: Position { line: 1097, column: 51, }, }, }, ), String( String_ { parts: [ Raw( PartRaw { content: "sufficient", span: Span { start: Position { line: 1097, column: 53, }, end: Position { line: 1097, column: 63, }, }, }, ), ], span: Span { start: Position { line: 1097, column: 52, }, end: Position { line: 1097, column: 64, }, }, }, ), String( String_ { parts: [ Raw( PartRaw { content: "optional", span: Span { start: Position { line: 1097, column: 66, }, end: Position { line: 1097, column: 74, }, }, }, ), ], span: Span { start: Position { line: 1097, column: 65, }, end: Position { line: 1097, column: 75, }, }, }, ), ], span: Span { start: Position { line: 1097, column: 27, }, end: Position { line: 1097, column: 77, }, }, }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "description", span: Span { start: Position { line: 1098, column: 9, }, end: Position { line: 1098, column: 20, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "lib", span: Span { start: Position { line: 1098, column: 23, }, end: Position { line: 1098, column: 26, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "mdDoc", span: Span { start: Position { line: 1098, column: 27, }, end: Position { line: 1098, column: 32, }, }, }, ), ], default: None, }, ), arguments: [ IndentedString( IndentedString { parts: [ Raw( PartRaw { content: "This option sets pam \"control\".\nIf you want to have multi factor authentication, use \"required\".\nIf you want to use Yubikey instead of regular password, use \"sufficient\".\n\nRead\n{manpage}`pam.conf(5)`\nfor better understanding of this option.\n", span: Span { start: Position { line: 1099, column: 1, }, end: Position { line: 1106, column: 9, }, }, }, ), ], span: Span { start: Position { line: 1098, column: 33, }, end: Position { line: 1106, column: 11, }, }, }, ), ], }, ), }, ), ], span: Span { start: Position { line: 1095, column: 26, }, end: Position { line: 1107, column: 8, }, }, }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "id", span: Span { start: Position { line: 1108, column: 7, }, end: Position { line: 1108, column: 9, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "mkOption", span: Span { start: Position { line: 1108, column: 12, }, end: Position { line: 1108, column: 20, }, }, }, ), arguments: [ Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "example", span: Span { start: Position { line: 1109, column: 9, }, end: Position { line: 1109, column: 16, }, }, }, ), ], to: String( String_ { parts: [ Raw( PartRaw { content: "42", span: Span { start: Position { line: 1109, column: 20, }, end: Position { line: 1109, column: 22, }, }, }, ), ], span: Span { start: Position { line: 1109, column: 19, }, end: Position { line: 1109, column: 23, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "type", span: Span { start: Position { line: 1110, column: 9, }, end: Position { line: 1110, column: 13, }, }, }, ), ], to: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "types", span: Span { start: Position { line: 1110, column: 16, }, end: Position { line: 1110, column: 21, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "str", span: Span { start: Position { line: 1110, column: 22, }, end: Position { line: 1110, column: 25, }, }, }, ), ], default: None, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "description", span: Span { start: Position { line: 1111, column: 9, }, end: Position { line: 1111, column: 20, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "lib", span: Span { start: Position { line: 1111, column: 23, }, end: Position { line: 1111, column: 26, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "mdDoc", span: Span { start: Position { line: 1111, column: 27, }, end: Position { line: 1111, column: 32, }, }, }, ), ], default: None, }, ), arguments: [ String( String_ { parts: [ Raw( PartRaw { content: "client id", span: Span { start: Position { line: 1111, column: 34, }, end: Position { line: 1111, column: 43, }, }, }, ), ], span: Span { start: Position { line: 1111, column: 33, }, end: Position { line: 1111, column: 44, }, }, }, ), ], }, ), }, ), ], span: Span { start: Position { line: 1108, column: 21, }, end: Position { line: 1112, column: 8, }, }, }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "debug", span: Span { start: Position { line: 1114, column: 7, }, end: Position { line: 1114, column: 12, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "mkOption", span: Span { start: Position { line: 1114, column: 15, }, end: Position { line: 1114, column: 23, }, }, }, ), arguments: [ Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "default", span: Span { start: Position { line: 1115, column: 9, }, end: Position { line: 1115, column: 16, }, }, }, ), ], to: Identifier( Identifier { id: "false", span: Span { start: Position { line: 1115, column: 19, }, end: Position { line: 1115, column: 24, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "type", span: Span { start: Position { line: 1116, column: 9, }, end: Position { line: 1116, column: 13, }, }, }, ), ], to: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "types", span: Span { start: Position { line: 1116, column: 16, }, end: Position { line: 1116, column: 21, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "bool", span: Span { start: Position { line: 1116, column: 22, }, end: Position { line: 1116, column: 26, }, }, }, ), ], default: None, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "description", span: Span { start: Position { line: 1117, column: 9, }, end: Position { line: 1117, column: 20, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "lib", span: Span { start: Position { line: 1117, column: 23, }, end: Position { line: 1117, column: 26, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "mdDoc", span: Span { start: Position { line: 1117, column: 27, }, end: Position { line: 1117, column: 32, }, }, }, ), ], default: None, }, ), arguments: [ IndentedString( IndentedString { parts: [ Raw( PartRaw { content: "Debug output to stderr.\n", span: Span { start: Position { line: 1118, column: 1, }, end: Position { line: 1119, column: 9, }, }, }, ), ], span: Span { start: Position { line: 1117, column: 33, }, end: Position { line: 1119, column: 11, }, }, }, ), ], }, ), }, ), ], span: Span { start: Position { line: 1114, column: 24, }, end: Position { line: 1120, column: 8, }, }, }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "mode", span: Span { start: Position { line: 1121, column: 7, }, end: Position { line: 1121, column: 11, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "mkOption", span: Span { start: Position { line: 1121, column: 14, }, end: Position { line: 1121, column: 22, }, }, }, ), arguments: [ Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "default", span: Span { start: Position { line: 1122, column: 9, }, end: Position { line: 1122, column: 16, }, }, }, ), ], to: String( String_ { parts: [ Raw( PartRaw { content: "client", span: Span { start: Position { line: 1122, column: 20, }, end: Position { line: 1122, column: 26, }, }, }, ), ], span: Span { start: Position { line: 1122, column: 19, }, end: Position { line: 1122, column: 27, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "type", span: Span { start: Position { line: 1123, column: 9, }, end: Position { line: 1123, column: 13, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "types", span: Span { start: Position { line: 1123, column: 16, }, end: Position { line: 1123, column: 21, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "enum", span: Span { start: Position { line: 1123, column: 22, }, end: Position { line: 1123, column: 26, }, }, }, ), ], default: None, }, ), arguments: [ List( List { elements: [ String( String_ { parts: [ Raw( PartRaw { content: "client", span: Span { start: Position { line: 1123, column: 30, }, end: Position { line: 1123, column: 36, }, }, }, ), ], span: Span { start: Position { line: 1123, column: 29, }, end: Position { line: 1123, column: 37, }, }, }, ), String( String_ { parts: [ Raw( PartRaw { content: "challenge-response", span: Span { start: Position { line: 1123, column: 39, }, end: Position { line: 1123, column: 57, }, }, }, ), ], span: Span { start: Position { line: 1123, column: 38, }, end: Position { line: 1123, column: 58, }, }, }, ), ], span: Span { start: Position { line: 1123, column: 27, }, end: Position { line: 1123, column: 60, }, }, }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "description", span: Span { start: Position { line: 1124, column: 9, }, end: Position { line: 1124, column: 20, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "lib", span: Span { start: Position { line: 1124, column: 23, }, end: Position { line: 1124, column: 26, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "mdDoc", span: Span { start: Position { line: 1124, column: 27, }, end: Position { line: 1124, column: 32, }, }, }, ), ], default: None, }, ), arguments: [ IndentedString( IndentedString { parts: [ Raw( PartRaw { content: "Mode of operation.\n\nUse \"client\" for online validation with a YubiKey validation service such as\nthe YubiCloud.\n\nUse \"challenge-response\" for offline validation using YubiKeys with HMAC-SHA-1\nChallenge-Response configurations. See the man-page ykpamcfg(1) for further\ndetails on how to configure offline Challenge-Response validation.\n\nMore information can be found [here](https://developers.yubico.com/yubico-pam/Authentication_Using_Challenge-Response.html).\n", span: Span { start: Position { line: 1125, column: 1, }, end: Position { line: 1135, column: 9, }, }, }, ), ], span: Span { start: Position { line: 1124, column: 33, }, end: Position { line: 1135, column: 11, }, }, }, ), ], }, ), }, ), ], span: Span { start: Position { line: 1121, column: 23, }, end: Position { line: 1136, column: 8, }, }, }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "challengeResponsePath", span: Span { start: Position { line: 1137, column: 7, }, end: Position { line: 1137, column: 28, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "mkOption", span: Span { start: Position { line: 1137, column: 31, }, end: Position { line: 1137, column: 39, }, }, }, ), arguments: [ Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "default", span: Span { start: Position { line: 1138, column: 9, }, end: Position { line: 1138, column: 16, }, }, }, ), ], to: Identifier( Identifier { id: "null", span: Span { start: Position { line: 1138, column: 19, }, end: Position { line: 1138, column: 23, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "type", span: Span { start: Position { line: 1139, column: 9, }, end: Position { line: 1139, column: 13, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "types", span: Span { start: Position { line: 1139, column: 16, }, end: Position { line: 1139, column: 21, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "nullOr", span: Span { start: Position { line: 1139, column: 22, }, end: Position { line: 1139, column: 28, }, }, }, ), ], default: None, }, ), arguments: [ PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "types", span: Span { start: Position { line: 1139, column: 29, }, end: Position { line: 1139, column: 34, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "path", span: Span { start: Position { line: 1139, column: 35, }, end: Position { line: 1139, column: 39, }, }, }, ), ], default: None, }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "description", span: Span { start: Position { line: 1140, column: 9, }, end: Position { line: 1140, column: 20, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "lib", span: Span { start: Position { line: 1140, column: 23, }, end: Position { line: 1140, column: 26, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "mdDoc", span: Span { start: Position { line: 1140, column: 27, }, end: Position { line: 1140, column: 32, }, }, }, ), ], default: None, }, ), arguments: [ IndentedString( IndentedString { parts: [ Raw( PartRaw { content: "If not null, set the path used by yubico pam module where the challenge expected response is stored.\n\nMore information can be found [here](https://developers.yubico.com/yubico-pam/Authentication_Using_Challenge-Response.html).\n", span: Span { start: Position { line: 1141, column: 1, }, end: Position { line: 1144, column: 9, }, }, }, ), ], span: Span { start: Position { line: 1140, column: 33, }, end: Position { line: 1144, column: 11, }, }, }, ), ], }, ), }, ), ], span: Span { start: Position { line: 1137, column: 40, }, end: Position { line: 1145, column: 8, }, }, }, ), ], }, ), }, ), ], span: Span { start: Position { line: 1079, column: 27, }, end: Position { line: 1146, column: 6, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "security", span: Span { start: Position { line: 1148, column: 5, }, end: Position { line: 1148, column: 13, }, }, }, ), Raw( PartRaw { content: "pam", span: Span { start: Position { line: 1148, column: 14, }, end: Position { line: 1148, column: 17, }, }, }, ), Raw( PartRaw { content: "enableEcryptfs", span: Span { start: Position { line: 1148, column: 18, }, end: Position { line: 1148, column: 32, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "mkEnableOption", span: Span { start: Position { line: 1148, column: 35, }, end: Position { line: 1148, column: 49, }, }, }, ), arguments: [ FunctionApplication( FunctionApplication { function: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "lib", span: Span { start: Position { line: 1148, column: 51, }, end: Position { line: 1148, column: 54, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "mdDoc", span: Span { start: Position { line: 1148, column: 55, }, end: Position { line: 1148, column: 60, }, }, }, ), ], default: None, }, ), arguments: [ String( String_ { parts: [ Raw( PartRaw { content: "eCryptfs PAM module (mounting ecryptfs home directory on login)", span: Span { start: Position { line: 1148, column: 62, }, end: Position { line: 1148, column: 125, }, }, }, ), ], span: Span { start: Position { line: 1148, column: 61, }, end: Position { line: 1148, column: 126, }, }, }, ), ], }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "users", span: Span { start: Position { line: 1150, column: 5, }, end: Position { line: 1150, column: 10, }, }, }, ), Raw( PartRaw { content: "motd", span: Span { start: Position { line: 1150, column: 11, }, end: Position { line: 1150, column: 15, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "mkOption", span: Span { start: Position { line: 1150, column: 18, }, end: Position { line: 1150, column: 26, }, }, }, ), arguments: [ Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "default", span: Span { start: Position { line: 1151, column: 7, }, end: Position { line: 1151, column: 14, }, }, }, ), ], to: Identifier( Identifier { id: "null", span: Span { start: Position { line: 1151, column: 17, }, end: Position { line: 1151, column: 21, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "example", span: Span { start: Position { line: 1152, column: 7, }, end: Position { line: 1152, column: 14, }, }, }, ), ], to: String( String_ { parts: [ Raw( PartRaw { content: "Today is Sweetmorn, the 4th day of The Aftermath in the YOLD 3178.", span: Span { start: Position { line: 1152, column: 18, }, end: Position { line: 1152, column: 84, }, }, }, ), ], span: Span { start: Position { line: 1152, column: 17, }, end: Position { line: 1152, column: 85, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "type", span: Span { start: Position { line: 1153, column: 7, }, end: Position { line: 1153, column: 11, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "types", span: Span { start: Position { line: 1153, column: 14, }, end: Position { line: 1153, column: 19, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "nullOr", span: Span { start: Position { line: 1153, column: 20, }, end: Position { line: 1153, column: 26, }, }, }, ), ], default: None, }, ), arguments: [ PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "types", span: Span { start: Position { line: 1153, column: 27, }, end: Position { line: 1153, column: 32, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "lines", span: Span { start: Position { line: 1153, column: 33, }, end: Position { line: 1153, column: 38, }, }, }, ), ], default: None, }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "description", span: Span { start: Position { line: 1154, column: 7, }, end: Position { line: 1154, column: 18, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "lib", span: Span { start: Position { line: 1154, column: 21, }, end: Position { line: 1154, column: 24, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "mdDoc", span: Span { start: Position { line: 1154, column: 25, }, end: Position { line: 1154, column: 30, }, }, }, ), ], default: None, }, ), arguments: [ String( String_ { parts: [ Raw( PartRaw { content: "Message of the day shown to users when they log in.", span: Span { start: Position { line: 1154, column: 32, }, end: Position { line: 1154, column: 83, }, }, }, ), ], span: Span { start: Position { line: 1154, column: 31, }, end: Position { line: 1154, column: 84, }, }, }, ), ], }, ), }, ), ], span: Span { start: Position { line: 1150, column: 27, }, end: Position { line: 1155, column: 6, }, }, }, ), ], }, ), }, ), ], span: Span { start: Position { line: 758, column: 13, }, end: Position { line: 1157, column: 4, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "config", span: Span { start: Position { line: 1162, column: 3, }, end: Position { line: 1162, column: 9, }, }, }, ), ], to: Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "environment", span: Span { start: Position { line: 1164, column: 5, }, end: Position { line: 1164, column: 16, }, }, }, ), Raw( PartRaw { content: "systemPackages", span: Span { start: Position { line: 1164, column: 17, }, end: Position { line: 1164, column: 31, }, }, }, ), ], to: BinaryOperation( BinaryOperation { left: List( List { elements: [ PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "pkgs", span: Span { start: Position { line: 1166, column: 9, }, end: Position { line: 1166, column: 13, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "pam", span: Span { start: Position { line: 1166, column: 14, }, end: Position { line: 1166, column: 17, }, }, }, ), ], default: None, }, ), ], span: Span { start: Position { line: 1166, column: 7, }, end: Position { line: 1166, column: 19, }, }, }, ), operator: Concatenation, right: BinaryOperation( BinaryOperation { left: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "optional", span: Span { start: Position { line: 1167, column: 10, }, end: Position { line: 1167, column: 18, }, }, }, ), arguments: [ PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "config", span: Span { start: Position { line: 1167, column: 19, }, end: Position { line: 1167, column: 25, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "users", span: Span { start: Position { line: 1167, column: 26, }, end: Position { line: 1167, column: 31, }, }, }, ), Raw( PartRaw { content: "ldap", span: Span { start: Position { line: 1167, column: 32, }, end: Position { line: 1167, column: 36, }, }, }, ), Raw( PartRaw { content: "enable", span: Span { start: Position { line: 1167, column: 37, }, end: Position { line: 1167, column: 43, }, }, }, ), ], default: None, }, ), Identifier( Identifier { id: "pam_ldap", span: Span { start: Position { line: 1167, column: 44, }, end: Position { line: 1167, column: 52, }, }, }, ), ], }, ), operator: Concatenation, right: BinaryOperation( BinaryOperation { left: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "optional", span: Span { start: Position { line: 1168, column: 10, }, end: Position { line: 1168, column: 18, }, }, }, ), arguments: [ PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "config", span: Span { start: Position { line: 1168, column: 19, }, end: Position { line: 1168, column: 25, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "services", span: Span { start: Position { line: 1168, column: 26, }, end: Position { line: 1168, column: 34, }, }, }, ), Raw( PartRaw { content: "sssd", span: Span { start: Position { line: 1168, column: 35, }, end: Position { line: 1168, column: 39, }, }, }, ), Raw( PartRaw { content: "enable", span: Span { start: Position { line: 1168, column: 40, }, end: Position { line: 1168, column: 46, }, }, }, ), ], default: None, }, ), PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "pkgs", span: Span { start: Position { line: 1168, column: 47, }, end: Position { line: 1168, column: 51, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "sssd", span: Span { start: Position { line: 1168, column: 52, }, end: Position { line: 1168, column: 56, }, }, }, ), ], default: None, }, ), ], }, ), operator: Concatenation, right: BinaryOperation( BinaryOperation { left: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "optionals", span: Span { start: Position { line: 1169, column: 10, }, end: Position { line: 1169, column: 19, }, }, }, ), arguments: [ PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "config", span: Span { start: Position { line: 1169, column: 20, }, end: Position { line: 1169, column: 26, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "security", span: Span { start: Position { line: 1169, column: 27, }, end: Position { line: 1169, column: 35, }, }, }, ), Raw( PartRaw { content: "pam", span: Span { start: Position { line: 1169, column: 36, }, end: Position { line: 1169, column: 39, }, }, }, ), Raw( PartRaw { content: "krb5", span: Span { start: Position { line: 1169, column: 40, }, end: Position { line: 1169, column: 44, }, }, }, ), Raw( PartRaw { content: "enable", span: Span { start: Position { line: 1169, column: 45, }, end: Position { line: 1169, column: 51, }, }, }, ), ], default: None, }, ), List( List { elements: [ Identifier( Identifier { id: "pam_krb5", span: Span { start: Position { line: 1169, column: 53, }, end: Position { line: 1169, column: 61, }, }, }, ), Identifier( Identifier { id: "pam_ccreds", span: Span { start: Position { line: 1169, column: 62, }, end: Position { line: 1169, column: 72, }, }, }, ), ], span: Span { start: Position { line: 1169, column: 52, }, end: Position { line: 1169, column: 73, }, }, }, ), ], }, ), operator: Concatenation, right: BinaryOperation( BinaryOperation { left: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "optionals", span: Span { start: Position { line: 1170, column: 10, }, end: Position { line: 1170, column: 19, }, }, }, ), arguments: [ PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "config", span: Span { start: Position { line: 1170, column: 20, }, end: Position { line: 1170, column: 26, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "security", span: Span { start: Position { line: 1170, column: 27, }, end: Position { line: 1170, column: 35, }, }, }, ), Raw( PartRaw { content: "pam", span: Span { start: Position { line: 1170, column: 36, }, end: Position { line: 1170, column: 39, }, }, }, ), Raw( PartRaw { content: "enableOTPW", span: Span { start: Position { line: 1170, column: 40, }, end: Position { line: 1170, column: 50, }, }, }, ), ], default: None, }, ), List( List { elements: [ PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "pkgs", span: Span { start: Position { line: 1170, column: 53, }, end: Position { line: 1170, column: 57, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "otpw", span: Span { start: Position { line: 1170, column: 58, }, end: Position { line: 1170, column: 62, }, }, }, ), ], default: None, }, ), ], span: Span { start: Position { line: 1170, column: 51, }, end: Position { line: 1170, column: 64, }, }, }, ), ], }, ), operator: Concatenation, right: BinaryOperation( BinaryOperation { left: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "optionals", span: Span { start: Position { line: 1171, column: 10, }, end: Position { line: 1171, column: 19, }, }, }, ), arguments: [ PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "config", span: Span { start: Position { line: 1171, column: 20, }, end: Position { line: 1171, column: 26, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "security", span: Span { start: Position { line: 1171, column: 27, }, end: Position { line: 1171, column: 35, }, }, }, ), Raw( PartRaw { content: "pam", span: Span { start: Position { line: 1171, column: 36, }, end: Position { line: 1171, column: 39, }, }, }, ), Raw( PartRaw { content: "oath", span: Span { start: Position { line: 1171, column: 40, }, end: Position { line: 1171, column: 44, }, }, }, ), Raw( PartRaw { content: "enable", span: Span { start: Position { line: 1171, column: 45, }, end: Position { line: 1171, column: 51, }, }, }, ), ], default: None, }, ), List( List { elements: [ PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "pkgs", span: Span { start: Position { line: 1171, column: 54, }, end: Position { line: 1171, column: 58, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "oath-toolkit", span: Span { start: Position { line: 1171, column: 59, }, end: Position { line: 1171, column: 71, }, }, }, ), ], default: None, }, ), ], span: Span { start: Position { line: 1171, column: 52, }, end: Position { line: 1171, column: 73, }, }, }, ), ], }, ), operator: Concatenation, right: BinaryOperation( BinaryOperation { left: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "optionals", span: Span { start: Position { line: 1172, column: 10, }, end: Position { line: 1172, column: 19, }, }, }, ), arguments: [ PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "config", span: Span { start: Position { line: 1172, column: 20, }, end: Position { line: 1172, column: 26, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "security", span: Span { start: Position { line: 1172, column: 27, }, end: Position { line: 1172, column: 35, }, }, }, ), Raw( PartRaw { content: "pam", span: Span { start: Position { line: 1172, column: 36, }, end: Position { line: 1172, column: 39, }, }, }, ), Raw( PartRaw { content: "p11", span: Span { start: Position { line: 1172, column: 40, }, end: Position { line: 1172, column: 43, }, }, }, ), Raw( PartRaw { content: "enable", span: Span { start: Position { line: 1172, column: 44, }, end: Position { line: 1172, column: 50, }, }, }, ), ], default: None, }, ), List( List { elements: [ PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "pkgs", span: Span { start: Position { line: 1172, column: 53, }, end: Position { line: 1172, column: 57, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "pam_p11", span: Span { start: Position { line: 1172, column: 58, }, end: Position { line: 1172, column: 65, }, }, }, ), ], default: None, }, ), ], span: Span { start: Position { line: 1172, column: 51, }, end: Position { line: 1172, column: 67, }, }, }, ), ], }, ), operator: Concatenation, right: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "optionals", span: Span { start: Position { line: 1173, column: 10, }, end: Position { line: 1173, column: 19, }, }, }, ), arguments: [ PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "config", span: Span { start: Position { line: 1173, column: 20, }, end: Position { line: 1173, column: 26, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "security", span: Span { start: Position { line: 1173, column: 27, }, end: Position { line: 1173, column: 35, }, }, }, ), Raw( PartRaw { content: "pam", span: Span { start: Position { line: 1173, column: 36, }, end: Position { line: 1173, column: 39, }, }, }, ), Raw( PartRaw { content: "u2f", span: Span { start: Position { line: 1173, column: 40, }, end: Position { line: 1173, column: 43, }, }, }, ), Raw( PartRaw { content: "enable", span: Span { start: Position { line: 1173, column: 44, }, end: Position { line: 1173, column: 50, }, }, }, ), ], default: None, }, ), List( List { elements: [ PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "pkgs", span: Span { start: Position { line: 1173, column: 53, }, end: Position { line: 1173, column: 57, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "pam_u2f", span: Span { start: Position { line: 1173, column: 58, }, end: Position { line: 1173, column: 65, }, }, }, ), ], default: None, }, ), ], span: Span { start: Position { line: 1173, column: 51, }, end: Position { line: 1173, column: 67, }, }, }, ), ], }, ), }, ), }, ), }, ), }, ), }, ), }, ), }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "boot", span: Span { start: Position { line: 1175, column: 5, }, end: Position { line: 1175, column: 9, }, }, }, ), Raw( PartRaw { content: "supportedFilesystems", span: Span { start: Position { line: 1175, column: 10, }, end: Position { line: 1175, column: 30, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "optionals", span: Span { start: Position { line: 1175, column: 33, }, end: Position { line: 1175, column: 42, }, }, }, ), arguments: [ PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "config", span: Span { start: Position { line: 1175, column: 43, }, end: Position { line: 1175, column: 49, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "security", span: Span { start: Position { line: 1175, column: 50, }, end: Position { line: 1175, column: 58, }, }, }, ), Raw( PartRaw { content: "pam", span: Span { start: Position { line: 1175, column: 59, }, end: Position { line: 1175, column: 62, }, }, }, ), Raw( PartRaw { content: "enableEcryptfs", span: Span { start: Position { line: 1175, column: 63, }, end: Position { line: 1175, column: 77, }, }, }, ), ], default: None, }, ), List( List { elements: [ String( String_ { parts: [ Raw( PartRaw { content: "ecryptfs", span: Span { start: Position { line: 1175, column: 81, }, end: Position { line: 1175, column: 89, }, }, }, ), ], span: Span { start: Position { line: 1175, column: 80, }, end: Position { line: 1175, column: 90, }, }, }, ), ], span: Span { start: Position { line: 1175, column: 78, }, end: Position { line: 1175, column: 92, }, }, }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "security", span: Span { start: Position { line: 1177, column: 5, }, end: Position { line: 1177, column: 13, }, }, }, ), Raw( PartRaw { content: "wrappers", span: Span { start: Position { line: 1177, column: 14, }, end: Position { line: 1177, column: 22, }, }, }, ), ], to: Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "unix_chkpwd", span: Span { start: Position { line: 1178, column: 7, }, end: Position { line: 1178, column: 18, }, }, }, ), ], to: Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "setuid", span: Span { start: Position { line: 1179, column: 9, }, end: Position { line: 1179, column: 15, }, }, }, ), ], to: Identifier( Identifier { id: "true", span: Span { start: Position { line: 1179, column: 18, }, end: Position { line: 1179, column: 22, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "owner", span: Span { start: Position { line: 1180, column: 9, }, end: Position { line: 1180, column: 14, }, }, }, ), ], to: String( String_ { parts: [ Raw( PartRaw { content: "root", span: Span { start: Position { line: 1180, column: 18, }, end: Position { line: 1180, column: 22, }, }, }, ), ], span: Span { start: Position { line: 1180, column: 17, }, end: Position { line: 1180, column: 23, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "group", span: Span { start: Position { line: 1181, column: 9, }, end: Position { line: 1181, column: 14, }, }, }, ), ], to: String( String_ { parts: [ Raw( PartRaw { content: "root", span: Span { start: Position { line: 1181, column: 18, }, end: Position { line: 1181, column: 22, }, }, }, ), ], span: Span { start: Position { line: 1181, column: 17, }, end: Position { line: 1181, column: 23, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "source", span: Span { start: Position { line: 1182, column: 9, }, end: Position { line: 1182, column: 15, }, }, }, ), ], to: String( String_ { parts: [ Interpolation( PartInterpolation { expression: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "pkgs", span: Span { start: Position { line: 1182, column: 21, }, end: Position { line: 1182, column: 25, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "pam", span: Span { start: Position { line: 1182, column: 26, }, end: Position { line: 1182, column: 29, }, }, }, ), ], default: None, }, ), }, ), Raw( PartRaw { content: "/bin/unix_chkpwd", span: Span { start: Position { line: 1182, column: 19, }, end: Position { line: 1182, column: 46, }, }, }, ), ], span: Span { start: Position { line: 1182, column: 18, }, end: Position { line: 1182, column: 47, }, }, }, ), }, ), ], span: Span { start: Position { line: 1178, column: 21, }, end: Position { line: 1183, column: 8, }, }, }, ), }, ), ], span: Span { start: Position { line: 1177, column: 25, }, end: Position { line: 1184, column: 6, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "environment", span: Span { start: Position { line: 1186, column: 5, }, end: Position { line: 1186, column: 16, }, }, }, ), Raw( PartRaw { content: "etc", span: Span { start: Position { line: 1186, column: 17, }, end: Position { line: 1186, column: 20, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "mapAttrs'", span: Span { start: Position { line: 1186, column: 23, }, end: Position { line: 1186, column: 32, }, }, }, ), arguments: [ Identifier( Identifier { id: "makePAMService", span: Span { start: Position { line: 1186, column: 33, }, end: Position { line: 1186, column: 47, }, }, }, ), PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "config", span: Span { start: Position { line: 1186, column: 48, }, end: Position { line: 1186, column: 54, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "security", span: Span { start: Position { line: 1186, column: 55, }, end: Position { line: 1186, column: 63, }, }, }, ), Raw( PartRaw { content: "pam", span: Span { start: Position { line: 1186, column: 64, }, end: Position { line: 1186, column: 67, }, }, }, ), Raw( PartRaw { content: "services", span: Span { start: Position { line: 1186, column: 68, }, end: Position { line: 1186, column: 76, }, }, }, ), ], default: None, }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "security", span: Span { start: Position { line: 1188, column: 5, }, end: Position { line: 1188, column: 13, }, }, }, ), Raw( PartRaw { content: "pam", span: Span { start: Position { line: 1188, column: 14, }, end: Position { line: 1188, column: 17, }, }, }, ), Raw( PartRaw { content: "services", span: Span { start: Position { line: 1188, column: 18, }, end: Position { line: 1188, column: 26, }, }, }, ), ], to: Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "other", span: Span { start: Position { line: 1189, column: 9, }, end: Position { line: 1189, column: 14, }, }, }, ), Raw( PartRaw { content: "text", span: Span { start: Position { line: 1189, column: 15, }, end: Position { line: 1189, column: 19, }, }, }, ), ], to: IndentedString( IndentedString { parts: [ Raw( PartRaw { content: "auth required pam_warn.so\nauth required pam_deny.so\naccount required pam_warn.so\naccount required pam_deny.so\npassword required pam_warn.so\npassword required pam_deny.so\nsession required pam_warn.so\nsession required pam_deny.so\n", span: Span { start: Position { line: 1191, column: 1, }, end: Position { line: 1199, column: 11, }, }, }, ), ], span: Span { start: Position { line: 1190, column: 11, }, end: Position { line: 1199, column: 13, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "i3lock", span: Span { start: Position { line: 1202, column: 9, }, end: Position { line: 1202, column: 15, }, }, }, ), ], to: Map( Map { recursive: false, bindings: [], span: Span { start: Position { line: 1202, column: 18, }, end: Position { line: 1202, column: 20, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "i3lock-color", span: Span { start: Position { line: 1203, column: 9, }, end: Position { line: 1203, column: 21, }, }, }, ), ], to: Map( Map { recursive: false, bindings: [], span: Span { start: Position { line: 1203, column: 24, }, end: Position { line: 1203, column: 26, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "vlock", span: Span { start: Position { line: 1204, column: 9, }, end: Position { line: 1204, column: 14, }, }, }, ), ], to: Map( Map { recursive: false, bindings: [], span: Span { start: Position { line: 1204, column: 17, }, end: Position { line: 1204, column: 19, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "xlock", span: Span { start: Position { line: 1205, column: 9, }, end: Position { line: 1205, column: 14, }, }, }, ), ], to: Map( Map { recursive: false, bindings: [], span: Span { start: Position { line: 1205, column: 17, }, end: Position { line: 1205, column: 19, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "xscreensaver", span: Span { start: Position { line: 1206, column: 9, }, end: Position { line: 1206, column: 21, }, }, }, ), ], to: Map( Map { recursive: false, bindings: [], span: Span { start: Position { line: 1206, column: 24, }, end: Position { line: 1206, column: 26, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "runuser", span: Span { start: Position { line: 1208, column: 9, }, end: Position { line: 1208, column: 16, }, }, }, ), ], to: Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "rootOK", span: Span { start: Position { line: 1208, column: 21, }, end: Position { line: 1208, column: 27, }, }, }, ), ], to: Identifier( Identifier { id: "true", span: Span { start: Position { line: 1208, column: 30, }, end: Position { line: 1208, column: 34, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "unixAuth", span: Span { start: Position { line: 1208, column: 36, }, end: Position { line: 1208, column: 44, }, }, }, ), ], to: Identifier( Identifier { id: "false", span: Span { start: Position { line: 1208, column: 47, }, end: Position { line: 1208, column: 52, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "setEnvironment", span: Span { start: Position { line: 1208, column: 54, }, end: Position { line: 1208, column: 68, }, }, }, ), ], to: Identifier( Identifier { id: "false", span: Span { start: Position { line: 1208, column: 71, }, end: Position { line: 1208, column: 76, }, }, }, ), }, ), ], span: Span { start: Position { line: 1208, column: 19, }, end: Position { line: 1208, column: 79, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "runuser-l", span: Span { start: Position { line: 1213, column: 9, }, end: Position { line: 1213, column: 18, }, }, }, ), ], to: Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "rootOK", span: Span { start: Position { line: 1213, column: 23, }, end: Position { line: 1213, column: 29, }, }, }, ), ], to: Identifier( Identifier { id: "true", span: Span { start: Position { line: 1213, column: 32, }, end: Position { line: 1213, column: 36, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "unixAuth", span: Span { start: Position { line: 1213, column: 38, }, end: Position { line: 1213, column: 46, }, }, }, ), ], to: Identifier( Identifier { id: "false", span: Span { start: Position { line: 1213, column: 49, }, end: Position { line: 1213, column: 54, }, }, }, ), }, ), ], span: Span { start: Position { line: 1213, column: 21, }, end: Position { line: 1213, column: 57, }, }, }, ), }, ), ], span: Span { start: Position { line: 1189, column: 7, }, end: Position { line: 1214, column: 8, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "security", span: Span { start: Position { line: 1216, column: 5, }, end: Position { line: 1216, column: 13, }, }, }, ), Raw( PartRaw { content: "apparmor", span: Span { start: Position { line: 1216, column: 14, }, end: Position { line: 1216, column: 22, }, }, }, ), Raw( PartRaw { content: "includes", span: Span { start: Position { line: 1216, column: 23, }, end: Position { line: 1216, column: 31, }, }, }, ), Expression( PartExpression { expression: String( String_ { parts: [ Raw( PartRaw { content: "abstractions/pam", span: Span { start: Position { line: 1216, column: 33, }, end: Position { line: 1216, column: 49, }, }, }, ), ], span: Span { start: Position { line: 1216, column: 32, }, end: Position { line: 1216, column: 50, }, }, }, ), }, ), ], to: LetIn( LetIn { bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "isEnabled", span: Span { start: Position { line: 1217, column: 7, }, end: Position { line: 1217, column: 16, }, }, }, ), ], to: Function( Function { head: Simple( FunctionHeadSimple { identifier: "test", }, ), body: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "fold", span: Span { start: Position { line: 1217, column: 25, }, end: Position { line: 1217, column: 29, }, }, }, ), arguments: [ Identifier( Identifier { id: "or", span: Span { start: Position { line: 1217, column: 25, }, end: Position { line: 1217, column: 32, }, }, }, ), Identifier( Identifier { id: "false", span: Span { start: Position { line: 1217, column: 33, }, end: Position { line: 1217, column: 38, }, }, }, ), FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "map", span: Span { start: Position { line: 1217, column: 40, }, end: Position { line: 1217, column: 43, }, }, }, ), arguments: [ Identifier( Identifier { id: "test", span: Span { start: Position { line: 1217, column: 44, }, end: Position { line: 1217, column: 48, }, }, }, ), FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "attrValues", span: Span { start: Position { line: 1217, column: 50, }, end: Position { line: 1217, column: 60, }, }, }, ), arguments: [ PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "config", span: Span { start: Position { line: 1217, column: 61, }, end: Position { line: 1217, column: 67, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "security", span: Span { start: Position { line: 1217, column: 68, }, end: Position { line: 1217, column: 76, }, }, }, ), Raw( PartRaw { content: "pam", span: Span { start: Position { line: 1217, column: 77, }, end: Position { line: 1217, column: 80, }, }, }, ), Raw( PartRaw { content: "services", span: Span { start: Position { line: 1217, column: 81, }, end: Position { line: 1217, column: 89, }, }, }, ), ], default: None, }, ), ], }, ), ], }, ), ], }, ), span: Span { start: Position { line: 1217, column: 19, }, end: Position { line: 1217, column: 91, }, }, }, ), }, ), ], target: BinaryOperation( BinaryOperation { left: BinaryOperation( BinaryOperation { left: BinaryOperation( BinaryOperation { left: BinaryOperation( BinaryOperation { left: BinaryOperation( BinaryOperation { left: BinaryOperation( BinaryOperation { left: BinaryOperation( BinaryOperation { left: BinaryOperation( BinaryOperation { left: BinaryOperation( BinaryOperation { left: BinaryOperation( BinaryOperation { left: BinaryOperation( BinaryOperation { left: BinaryOperation( BinaryOperation { left: BinaryOperation( BinaryOperation { left: BinaryOperation( BinaryOperation { left: BinaryOperation( BinaryOperation { left: BinaryOperation( BinaryOperation { left: BinaryOperation( BinaryOperation { left: BinaryOperation( BinaryOperation { left: BinaryOperation( BinaryOperation { left: BinaryOperation( BinaryOperation { left: BinaryOperation( BinaryOperation { left: BinaryOperation( BinaryOperation { left: BinaryOperation( BinaryOperation { left: FunctionApplication( FunctionApplication { function: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "lib", span: Span { start: Position { line: 1219, column: 7, }, end: Position { line: 1219, column: 10, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "concatMapStrings", span: Span { start: Position { line: 1219, column: 11, }, end: Position { line: 1219, column: 27, }, }, }, ), ], default: None, }, ), arguments: [ Function( Function { head: Simple( FunctionHeadSimple { identifier: "name", }, ), body: String( String_ { parts: [ Raw( PartRaw { content: "r ", span: Span { start: Position { line: 1220, column: 17, }, end: Position { line: 1220, column: 67, }, }, }, ), Interpolation( PartInterpolation { expression: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "config", span: Span { start: Position { line: 1220, column: 21, }, end: Position { line: 1220, column: 27, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "environment", span: Span { start: Position { line: 1220, column: 28, }, end: Position { line: 1220, column: 39, }, }, }, ), Raw( PartRaw { content: "etc", span: Span { start: Position { line: 1220, column: 40, }, end: Position { line: 1220, column: 43, }, }, }, ), Expression( PartExpression { expression: String( String_ { parts: [ Raw( PartRaw { content: "pam.d/", span: Span { start: Position { line: 1220, column: 45, }, end: Position { line: 1220, column: 58, }, }, }, ), Interpolation( PartInterpolation { expression: Identifier( Identifier { id: "name", span: Span { start: Position { line: 1220, column: 53, }, end: Position { line: 1220, column: 57, }, }, }, ), }, ), ], span: Span { start: Position { line: 1220, column: 44, }, end: Position { line: 1220, column: 59, }, }, }, ), }, ), Raw( PartRaw { content: "source", span: Span { start: Position { line: 1220, column: 60, }, end: Position { line: 1220, column: 66, }, }, }, ), ], default: None, }, ), }, ), Raw( PartRaw { content: ",\n", span: Span { start: Position { line: 1220, column: 17, }, end: Position { line: 1220, column: 70, }, }, }, ), ], span: Span { start: Position { line: 1220, column: 16, }, end: Position { line: 1220, column: 71, }, }, }, ), span: Span { start: Position { line: 1220, column: 10, }, end: Position { line: 1220, column: 71, }, }, }, ), FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "attrNames", span: Span { start: Position { line: 1221, column: 10, }, end: Position { line: 1221, column: 19, }, }, }, ), arguments: [ PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "config", span: Span { start: Position { line: 1221, column: 20, }, end: Position { line: 1221, column: 26, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "security", span: Span { start: Position { line: 1221, column: 27, }, end: Position { line: 1221, column: 35, }, }, }, ), Raw( PartRaw { content: "pam", span: Span { start: Position { line: 1221, column: 36, }, end: Position { line: 1221, column: 39, }, }, }, ), Raw( PartRaw { content: "services", span: Span { start: Position { line: 1221, column: 40, }, end: Position { line: 1221, column: 48, }, }, }, ), ], default: None, }, ), ], }, ), ], }, ), operator: Addition, right: IndentedString( IndentedString { parts: [ Raw( PartRaw { content: "mr ", span: Span { start: Position { line: 1223, column: 1, }, end: Position { line: 1223, column: 10, }, }, }, ), Interpolation( PartInterpolation { expression: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "getLib", span: Span { start: Position { line: 1223, column: 12, }, end: Position { line: 1223, column: 18, }, }, }, ), arguments: [ PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "pkgs", span: Span { start: Position { line: 1223, column: 19, }, end: Position { line: 1223, column: 23, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "pam", span: Span { start: Position { line: 1223, column: 24, }, end: Position { line: 1223, column: 27, }, }, }, ), ], default: None, }, ), ], }, ), }, ), Raw( PartRaw { content: "/lib/security/pam_filter/*,\nmr ", span: Span { start: Position { line: 1223, column: 1, }, end: Position { line: 1224, column: 10, }, }, }, ), Interpolation( PartInterpolation { expression: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "getLib", span: Span { start: Position { line: 1224, column: 12, }, end: Position { line: 1224, column: 18, }, }, }, ), arguments: [ PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "pkgs", span: Span { start: Position { line: 1224, column: 19, }, end: Position { line: 1224, column: 23, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "pam", span: Span { start: Position { line: 1224, column: 24, }, end: Position { line: 1224, column: 27, }, }, }, ), ], default: None, }, ), ], }, ), }, ), Raw( PartRaw { content: "/lib/security/pam_*.so,\nr ", span: Span { start: Position { line: 1223, column: 1, }, end: Position { line: 1225, column: 9, }, }, }, ), Interpolation( PartInterpolation { expression: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "getLib", span: Span { start: Position { line: 1225, column: 11, }, end: Position { line: 1225, column: 17, }, }, }, ), arguments: [ PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "pkgs", span: Span { start: Position { line: 1225, column: 18, }, end: Position { line: 1225, column: 22, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "pam", span: Span { start: Position { line: 1225, column: 23, }, end: Position { line: 1225, column: 26, }, }, }, ), ], default: None, }, ), ], }, ), }, ), Raw( PartRaw { content: "/lib/security/,\n", span: Span { start: Position { line: 1223, column: 1, }, end: Position { line: 1226, column: 7, }, }, }, ), ], span: Span { start: Position { line: 1222, column: 7, }, end: Position { line: 1226, column: 9, }, }, }, ), }, ), operator: Addition, right: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "optionalString", span: Span { start: Position { line: 1227, column: 7, }, end: Position { line: 1227, column: 21, }, }, }, ), arguments: [ Identifier( Identifier { id: "use_ldap", span: Span { start: Position { line: 1227, column: 22, }, end: Position { line: 1227, column: 30, }, }, }, ), IndentedString( IndentedString { parts: [ Raw( PartRaw { content: "mr ", span: Span { start: Position { line: 1228, column: 1, }, end: Position { line: 1228, column: 13, }, }, }, ), Interpolation( PartInterpolation { expression: Identifier( Identifier { id: "pam_ldap", span: Span { start: Position { line: 1228, column: 15, }, end: Position { line: 1228, column: 23, }, }, }, ), }, ), Raw( PartRaw { content: "/lib/security/pam_ldap.so,\n", span: Span { start: Position { line: 1228, column: 1, }, end: Position { line: 1229, column: 7, }, }, }, ), ], span: Span { start: Position { line: 1227, column: 31, }, end: Position { line: 1229, column: 9, }, }, }, ), ], }, ), }, ), operator: Addition, right: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "optionalString", span: Span { start: Position { line: 1230, column: 7, }, end: Position { line: 1230, column: 21, }, }, }, ), arguments: [ PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "config", span: Span { start: Position { line: 1230, column: 22, }, end: Position { line: 1230, column: 28, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "services", span: Span { start: Position { line: 1230, column: 29, }, end: Position { line: 1230, column: 37, }, }, }, ), Raw( PartRaw { content: "sssd", span: Span { start: Position { line: 1230, column: 38, }, end: Position { line: 1230, column: 42, }, }, }, ), Raw( PartRaw { content: "enable", span: Span { start: Position { line: 1230, column: 43, }, end: Position { line: 1230, column: 49, }, }, }, ), ], default: None, }, ), IndentedString( IndentedString { parts: [ Raw( PartRaw { content: "mr ", span: Span { start: Position { line: 1231, column: 1, }, end: Position { line: 1231, column: 12, }, }, }, ), Interpolation( PartInterpolation { expression: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "pkgs", span: Span { start: Position { line: 1231, column: 14, }, end: Position { line: 1231, column: 18, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "sssd", span: Span { start: Position { line: 1231, column: 19, }, end: Position { line: 1231, column: 23, }, }, }, ), ], default: None, }, ), }, ), Raw( PartRaw { content: "/lib/security/pam_sss.so,\n", span: Span { start: Position { line: 1231, column: 1, }, end: Position { line: 1232, column: 7, }, }, }, ), ], span: Span { start: Position { line: 1230, column: 50, }, end: Position { line: 1232, column: 9, }, }, }, ), ], }, ), }, ), operator: Addition, right: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "optionalString", span: Span { start: Position { line: 1233, column: 7, }, end: Position { line: 1233, column: 21, }, }, }, ), arguments: [ PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "config", span: Span { start: Position { line: 1233, column: 22, }, end: Position { line: 1233, column: 28, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "security", span: Span { start: Position { line: 1233, column: 29, }, end: Position { line: 1233, column: 37, }, }, }, ), Raw( PartRaw { content: "pam", span: Span { start: Position { line: 1233, column: 38, }, end: Position { line: 1233, column: 41, }, }, }, ), Raw( PartRaw { content: "krb5", span: Span { start: Position { line: 1233, column: 42, }, end: Position { line: 1233, column: 46, }, }, }, ), Raw( PartRaw { content: "enable", span: Span { start: Position { line: 1233, column: 47, }, end: Position { line: 1233, column: 53, }, }, }, ), ], default: None, }, ), IndentedString( IndentedString { parts: [ Raw( PartRaw { content: "mr ", span: Span { start: Position { line: 1234, column: 1, }, end: Position { line: 1234, column: 12, }, }, }, ), Interpolation( PartInterpolation { expression: Identifier( Identifier { id: "pam_krb5", span: Span { start: Position { line: 1234, column: 14, }, end: Position { line: 1234, column: 22, }, }, }, ), }, ), Raw( PartRaw { content: "/lib/security/pam_krb5.so,\nmr ", span: Span { start: Position { line: 1234, column: 1, }, end: Position { line: 1235, column: 12, }, }, }, ), Interpolation( PartInterpolation { expression: Identifier( Identifier { id: "pam_ccreds", span: Span { start: Position { line: 1235, column: 14, }, end: Position { line: 1235, column: 24, }, }, }, ), }, ), Raw( PartRaw { content: "/lib/security/pam_ccreds.so,\n", span: Span { start: Position { line: 1234, column: 1, }, end: Position { line: 1236, column: 7, }, }, }, ), ], span: Span { start: Position { line: 1233, column: 54, }, end: Position { line: 1236, column: 9, }, }, }, ), ], }, ), }, ), operator: Addition, right: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "optionalString", span: Span { start: Position { line: 1237, column: 7, }, end: Position { line: 1237, column: 21, }, }, }, ), arguments: [ FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "isEnabled", span: Span { start: Position { line: 1237, column: 23, }, end: Position { line: 1237, column: 32, }, }, }, ), arguments: [ Function( Function { head: Simple( FunctionHeadSimple { identifier: "cfg", }, ), body: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "cfg", span: Span { start: Position { line: 1237, column: 39, }, end: Position { line: 1237, column: 42, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "googleOsLoginAccountVerification", span: Span { start: Position { line: 1237, column: 43, }, end: Position { line: 1237, column: 75, }, }, }, ), ], default: None, }, ), span: Span { start: Position { line: 1237, column: 34, }, end: Position { line: 1237, column: 75, }, }, }, ), ], }, ), IndentedString( IndentedString { parts: [ Raw( PartRaw { content: "mr ", span: Span { start: Position { line: 1238, column: 1, }, end: Position { line: 1238, column: 12, }, }, }, ), Interpolation( PartInterpolation { expression: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "pkgs", span: Span { start: Position { line: 1238, column: 14, }, end: Position { line: 1238, column: 18, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "google-guest-oslogin", span: Span { start: Position { line: 1238, column: 19, }, end: Position { line: 1238, column: 39, }, }, }, ), ], default: None, }, ), }, ), Raw( PartRaw { content: "/lib/security/pam_oslogin_login.so,\nmr ", span: Span { start: Position { line: 1238, column: 1, }, end: Position { line: 1239, column: 12, }, }, }, ), Interpolation( PartInterpolation { expression: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "pkgs", span: Span { start: Position { line: 1239, column: 14, }, end: Position { line: 1239, column: 18, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "google-guest-oslogin", span: Span { start: Position { line: 1239, column: 19, }, end: Position { line: 1239, column: 39, }, }, }, ), ], default: None, }, ), }, ), Raw( PartRaw { content: "/lib/security/pam_oslogin_admin.so,\n", span: Span { start: Position { line: 1238, column: 1, }, end: Position { line: 1240, column: 7, }, }, }, ), ], span: Span { start: Position { line: 1237, column: 78, }, end: Position { line: 1240, column: 9, }, }, }, ), ], }, ), }, ), operator: Addition, right: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "optionalString", span: Span { start: Position { line: 1241, column: 7, }, end: Position { line: 1241, column: 21, }, }, }, ), arguments: [ FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "isEnabled", span: Span { start: Position { line: 1241, column: 23, }, end: Position { line: 1241, column: 32, }, }, }, ), arguments: [ Function( Function { head: Simple( FunctionHeadSimple { identifier: "cfg", }, ), body: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "cfg", span: Span { start: Position { line: 1241, column: 39, }, end: Position { line: 1241, column: 42, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "googleOsLoginAuthentication", span: Span { start: Position { line: 1241, column: 43, }, end: Position { line: 1241, column: 70, }, }, }, ), ], default: None, }, ), span: Span { start: Position { line: 1241, column: 34, }, end: Position { line: 1241, column: 70, }, }, }, ), ], }, ), IndentedString( IndentedString { parts: [ Raw( PartRaw { content: "mr ", span: Span { start: Position { line: 1242, column: 1, }, end: Position { line: 1242, column: 12, }, }, }, ), Interpolation( PartInterpolation { expression: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "pkgs", span: Span { start: Position { line: 1242, column: 14, }, end: Position { line: 1242, column: 18, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "google-guest-oslogin", span: Span { start: Position { line: 1242, column: 19, }, end: Position { line: 1242, column: 39, }, }, }, ), ], default: None, }, ), }, ), Raw( PartRaw { content: "/lib/security/pam_oslogin_login.so,\n", span: Span { start: Position { line: 1242, column: 1, }, end: Position { line: 1243, column: 7, }, }, }, ), ], span: Span { start: Position { line: 1241, column: 73, }, end: Position { line: 1243, column: 9, }, }, }, ), ], }, ), }, ), operator: Addition, right: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "optionalString", span: Span { start: Position { line: 1244, column: 7, }, end: Position { line: 1244, column: 21, }, }, }, ), arguments: [ BinaryOperation( BinaryOperation { left: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "config", span: Span { start: Position { line: 1244, column: 23, }, end: Position { line: 1244, column: 29, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "security", span: Span { start: Position { line: 1244, column: 30, }, end: Position { line: 1244, column: 38, }, }, }, ), Raw( PartRaw { content: "pam", span: Span { start: Position { line: 1244, column: 39, }, end: Position { line: 1244, column: 42, }, }, }, ), Raw( PartRaw { content: "enableSSHAgentAuth", span: Span { start: Position { line: 1244, column: 43, }, end: Position { line: 1244, column: 61, }, }, }, ), ], default: None, }, ), operator: LogicalAnd, right: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "isEnabled", span: Span { start: Position { line: 1245, column: 25, }, end: Position { line: 1245, column: 34, }, }, }, ), arguments: [ Function( Function { head: Simple( FunctionHeadSimple { identifier: "cfg", }, ), body: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "cfg", span: Span { start: Position { line: 1245, column: 41, }, end: Position { line: 1245, column: 44, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "sshAgentAuth", span: Span { start: Position { line: 1245, column: 45, }, end: Position { line: 1245, column: 57, }, }, }, ), ], default: None, }, ), span: Span { start: Position { line: 1245, column: 36, }, end: Position { line: 1245, column: 57, }, }, }, ), ], }, ), }, ), IndentedString( IndentedString { parts: [ Raw( PartRaw { content: "mr ", span: Span { start: Position { line: 1246, column: 1, }, end: Position { line: 1246, column: 12, }, }, }, ), Interpolation( PartInterpolation { expression: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "pkgs", span: Span { start: Position { line: 1246, column: 14, }, end: Position { line: 1246, column: 18, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "pam_ssh_agent_auth", span: Span { start: Position { line: 1246, column: 19, }, end: Position { line: 1246, column: 37, }, }, }, ), ], default: None, }, ), }, ), Raw( PartRaw { content: "/libexec/pam_ssh_agent_auth.so,\n", span: Span { start: Position { line: 1246, column: 1, }, end: Position { line: 1247, column: 7, }, }, }, ), ], span: Span { start: Position { line: 1245, column: 60, }, end: Position { line: 1247, column: 9, }, }, }, ), ], }, ), }, ), operator: Addition, right: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "optionalString", span: Span { start: Position { line: 1248, column: 7, }, end: Position { line: 1248, column: 21, }, }, }, ), arguments: [ FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "isEnabled", span: Span { start: Position { line: 1248, column: 23, }, end: Position { line: 1248, column: 32, }, }, }, ), arguments: [ Function( Function { head: Simple( FunctionHeadSimple { identifier: "cfg", }, ), body: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "cfg", span: Span { start: Position { line: 1248, column: 39, }, end: Position { line: 1248, column: 42, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "fprintAuth", span: Span { start: Position { line: 1248, column: 43, }, end: Position { line: 1248, column: 53, }, }, }, ), ], default: None, }, ), span: Span { start: Position { line: 1248, column: 34, }, end: Position { line: 1248, column: 53, }, }, }, ), ], }, ), IndentedString( IndentedString { parts: [ Raw( PartRaw { content: "mr ", span: Span { start: Position { line: 1249, column: 1, }, end: Position { line: 1249, column: 12, }, }, }, ), Interpolation( PartInterpolation { expression: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "pkgs", span: Span { start: Position { line: 1249, column: 14, }, end: Position { line: 1249, column: 18, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "fprintd", span: Span { start: Position { line: 1249, column: 19, }, end: Position { line: 1249, column: 26, }, }, }, ), ], default: None, }, ), }, ), Raw( PartRaw { content: "/lib/security/pam_fprintd.so,\n", span: Span { start: Position { line: 1249, column: 1, }, end: Position { line: 1250, column: 7, }, }, }, ), ], span: Span { start: Position { line: 1248, column: 56, }, end: Position { line: 1250, column: 9, }, }, }, ), ], }, ), }, ), operator: Addition, right: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "optionalString", span: Span { start: Position { line: 1251, column: 7, }, end: Position { line: 1251, column: 21, }, }, }, ), arguments: [ FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "isEnabled", span: Span { start: Position { line: 1251, column: 23, }, end: Position { line: 1251, column: 32, }, }, }, ), arguments: [ Function( Function { head: Simple( FunctionHeadSimple { identifier: "cfg", }, ), body: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "cfg", span: Span { start: Position { line: 1251, column: 39, }, end: Position { line: 1251, column: 42, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "u2fAuth", span: Span { start: Position { line: 1251, column: 43, }, end: Position { line: 1251, column: 50, }, }, }, ), ], default: None, }, ), span: Span { start: Position { line: 1251, column: 34, }, end: Position { line: 1251, column: 50, }, }, }, ), ], }, ), IndentedString( IndentedString { parts: [ Raw( PartRaw { content: "mr ", span: Span { start: Position { line: 1252, column: 1, }, end: Position { line: 1252, column: 12, }, }, }, ), Interpolation( PartInterpolation { expression: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "pkgs", span: Span { start: Position { line: 1252, column: 14, }, end: Position { line: 1252, column: 18, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "pam_u2f", span: Span { start: Position { line: 1252, column: 19, }, end: Position { line: 1252, column: 26, }, }, }, ), ], default: None, }, ), }, ), Raw( PartRaw { content: "/lib/security/pam_u2f.so,\n", span: Span { start: Position { line: 1252, column: 1, }, end: Position { line: 1253, column: 7, }, }, }, ), ], span: Span { start: Position { line: 1251, column: 53, }, end: Position { line: 1253, column: 9, }, }, }, ), ], }, ), }, ), operator: Addition, right: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "optionalString", span: Span { start: Position { line: 1254, column: 7, }, end: Position { line: 1254, column: 21, }, }, }, ), arguments: [ FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "isEnabled", span: Span { start: Position { line: 1254, column: 23, }, end: Position { line: 1254, column: 32, }, }, }, ), arguments: [ Function( Function { head: Simple( FunctionHeadSimple { identifier: "cfg", }, ), body: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "cfg", span: Span { start: Position { line: 1254, column: 39, }, end: Position { line: 1254, column: 42, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "usbAuth", span: Span { start: Position { line: 1254, column: 43, }, end: Position { line: 1254, column: 50, }, }, }, ), ], default: None, }, ), span: Span { start: Position { line: 1254, column: 34, }, end: Position { line: 1254, column: 50, }, }, }, ), ], }, ), IndentedString( IndentedString { parts: [ Raw( PartRaw { content: "mr ", span: Span { start: Position { line: 1255, column: 1, }, end: Position { line: 1255, column: 12, }, }, }, ), Interpolation( PartInterpolation { expression: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "pkgs", span: Span { start: Position { line: 1255, column: 14, }, end: Position { line: 1255, column: 18, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "pam_usb", span: Span { start: Position { line: 1255, column: 19, }, end: Position { line: 1255, column: 26, }, }, }, ), ], default: None, }, ), }, ), Raw( PartRaw { content: "/lib/security/pam_usb.so,\n", span: Span { start: Position { line: 1255, column: 1, }, end: Position { line: 1256, column: 7, }, }, }, ), ], span: Span { start: Position { line: 1254, column: 53, }, end: Position { line: 1256, column: 9, }, }, }, ), ], }, ), }, ), operator: Addition, right: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "optionalString", span: Span { start: Position { line: 1257, column: 7, }, end: Position { line: 1257, column: 21, }, }, }, ), arguments: [ FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "isEnabled", span: Span { start: Position { line: 1257, column: 23, }, end: Position { line: 1257, column: 32, }, }, }, ), arguments: [ Function( Function { head: Simple( FunctionHeadSimple { identifier: "cfg", }, ), body: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "cfg", span: Span { start: Position { line: 1257, column: 39, }, end: Position { line: 1257, column: 42, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "usshAuth", span: Span { start: Position { line: 1257, column: 43, }, end: Position { line: 1257, column: 51, }, }, }, ), ], default: None, }, ), span: Span { start: Position { line: 1257, column: 34, }, end: Position { line: 1257, column: 51, }, }, }, ), ], }, ), IndentedString( IndentedString { parts: [ Raw( PartRaw { content: "mr ", span: Span { start: Position { line: 1258, column: 1, }, end: Position { line: 1258, column: 12, }, }, }, ), Interpolation( PartInterpolation { expression: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "pkgs", span: Span { start: Position { line: 1258, column: 14, }, end: Position { line: 1258, column: 18, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "pam_ussh", span: Span { start: Position { line: 1258, column: 19, }, end: Position { line: 1258, column: 27, }, }, }, ), ], default: None, }, ), }, ), Raw( PartRaw { content: "/lib/security/pam_ussh.so,\n", span: Span { start: Position { line: 1258, column: 1, }, end: Position { line: 1259, column: 7, }, }, }, ), ], span: Span { start: Position { line: 1257, column: 54, }, end: Position { line: 1259, column: 9, }, }, }, ), ], }, ), }, ), operator: Addition, right: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "optionalString", span: Span { start: Position { line: 1260, column: 7, }, end: Position { line: 1260, column: 21, }, }, }, ), arguments: [ FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "isEnabled", span: Span { start: Position { line: 1260, column: 23, }, end: Position { line: 1260, column: 32, }, }, }, ), arguments: [ Function( Function { head: Simple( FunctionHeadSimple { identifier: "cfg", }, ), body: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "cfg", span: Span { start: Position { line: 1260, column: 39, }, end: Position { line: 1260, column: 42, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "oathAuth", span: Span { start: Position { line: 1260, column: 43, }, end: Position { line: 1260, column: 51, }, }, }, ), ], default: None, }, ), span: Span { start: Position { line: 1260, column: 34, }, end: Position { line: 1260, column: 51, }, }, }, ), ], }, ), IndentedString( IndentedString { parts: [ Raw( PartRaw { content: "\"mr ", span: Span { start: Position { line: 1261, column: 1, }, end: Position { line: 1261, column: 13, }, }, }, ), Interpolation( PartInterpolation { expression: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "pkgs", span: Span { start: Position { line: 1261, column: 15, }, end: Position { line: 1261, column: 19, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "oath-toolkit", span: Span { start: Position { line: 1261, column: 20, }, end: Position { line: 1261, column: 32, }, }, }, ), ], default: None, }, ), }, ), Raw( PartRaw { content: "/lib/security/pam_oath.so,\n", span: Span { start: Position { line: 1261, column: 1, }, end: Position { line: 1262, column: 7, }, }, }, ), ], span: Span { start: Position { line: 1260, column: 54, }, end: Position { line: 1262, column: 9, }, }, }, ), ], }, ), }, ), operator: Addition, right: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "optionalString", span: Span { start: Position { line: 1263, column: 7, }, end: Position { line: 1263, column: 21, }, }, }, ), arguments: [ FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "isEnabled", span: Span { start: Position { line: 1263, column: 23, }, end: Position { line: 1263, column: 32, }, }, }, ), arguments: [ Function( Function { head: Simple( FunctionHeadSimple { identifier: "cfg", }, ), body: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "cfg", span: Span { start: Position { line: 1263, column: 39, }, end: Position { line: 1263, column: 42, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "mysqlAuth", span: Span { start: Position { line: 1263, column: 43, }, end: Position { line: 1263, column: 52, }, }, }, ), ], default: None, }, ), span: Span { start: Position { line: 1263, column: 34, }, end: Position { line: 1263, column: 52, }, }, }, ), ], }, ), IndentedString( IndentedString { parts: [ Raw( PartRaw { content: "mr ", span: Span { start: Position { line: 1264, column: 1, }, end: Position { line: 1264, column: 12, }, }, }, ), Interpolation( PartInterpolation { expression: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "pkgs", span: Span { start: Position { line: 1264, column: 14, }, end: Position { line: 1264, column: 18, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "pam_mysql", span: Span { start: Position { line: 1264, column: 19, }, end: Position { line: 1264, column: 28, }, }, }, ), ], default: None, }, ), }, ), Raw( PartRaw { content: "/lib/security/pam_mysql.so,\n", span: Span { start: Position { line: 1264, column: 1, }, end: Position { line: 1265, column: 7, }, }, }, ), ], span: Span { start: Position { line: 1263, column: 55, }, end: Position { line: 1265, column: 9, }, }, }, ), ], }, ), }, ), operator: Addition, right: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "optionalString", span: Span { start: Position { line: 1266, column: 7, }, end: Position { line: 1266, column: 21, }, }, }, ), arguments: [ FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "isEnabled", span: Span { start: Position { line: 1266, column: 23, }, end: Position { line: 1266, column: 32, }, }, }, ), arguments: [ Function( Function { head: Simple( FunctionHeadSimple { identifier: "cfg", }, ), body: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "cfg", span: Span { start: Position { line: 1266, column: 39, }, end: Position { line: 1266, column: 42, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "yubicoAuth", span: Span { start: Position { line: 1266, column: 43, }, end: Position { line: 1266, column: 53, }, }, }, ), ], default: None, }, ), span: Span { start: Position { line: 1266, column: 34, }, end: Position { line: 1266, column: 53, }, }, }, ), ], }, ), IndentedString( IndentedString { parts: [ Raw( PartRaw { content: "mr ", span: Span { start: Position { line: 1267, column: 1, }, end: Position { line: 1267, column: 12, }, }, }, ), Interpolation( PartInterpolation { expression: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "pkgs", span: Span { start: Position { line: 1267, column: 14, }, end: Position { line: 1267, column: 18, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "yubico-pam", span: Span { start: Position { line: 1267, column: 19, }, end: Position { line: 1267, column: 29, }, }, }, ), ], default: None, }, ), }, ), Raw( PartRaw { content: "/lib/security/pam_yubico.so,\n", span: Span { start: Position { line: 1267, column: 1, }, end: Position { line: 1268, column: 7, }, }, }, ), ], span: Span { start: Position { line: 1266, column: 56, }, end: Position { line: 1268, column: 9, }, }, }, ), ], }, ), }, ), operator: Addition, right: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "optionalString", span: Span { start: Position { line: 1269, column: 7, }, end: Position { line: 1269, column: 21, }, }, }, ), arguments: [ FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "isEnabled", span: Span { start: Position { line: 1269, column: 23, }, end: Position { line: 1269, column: 32, }, }, }, ), arguments: [ Function( Function { head: Simple( FunctionHeadSimple { identifier: "cfg", }, ), body: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "cfg", span: Span { start: Position { line: 1269, column: 39, }, end: Position { line: 1269, column: 42, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "duoSecurity", span: Span { start: Position { line: 1269, column: 43, }, end: Position { line: 1269, column: 54, }, }, }, ), Raw( PartRaw { content: "enable", span: Span { start: Position { line: 1269, column: 55, }, end: Position { line: 1269, column: 61, }, }, }, ), ], default: None, }, ), span: Span { start: Position { line: 1269, column: 34, }, end: Position { line: 1269, column: 61, }, }, }, ), ], }, ), IndentedString( IndentedString { parts: [ Raw( PartRaw { content: "mr ", span: Span { start: Position { line: 1270, column: 1, }, end: Position { line: 1270, column: 12, }, }, }, ), Interpolation( PartInterpolation { expression: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "pkgs", span: Span { start: Position { line: 1270, column: 14, }, end: Position { line: 1270, column: 18, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "duo-unix", span: Span { start: Position { line: 1270, column: 19, }, end: Position { line: 1270, column: 27, }, }, }, ), ], default: None, }, ), }, ), Raw( PartRaw { content: "/lib/security/pam_duo.so,\n", span: Span { start: Position { line: 1270, column: 1, }, end: Position { line: 1271, column: 7, }, }, }, ), ], span: Span { start: Position { line: 1269, column: 64, }, end: Position { line: 1271, column: 9, }, }, }, ), ], }, ), }, ), operator: Addition, right: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "optionalString", span: Span { start: Position { line: 1272, column: 7, }, end: Position { line: 1272, column: 21, }, }, }, ), arguments: [ FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "isEnabled", span: Span { start: Position { line: 1272, column: 23, }, end: Position { line: 1272, column: 32, }, }, }, ), arguments: [ Function( Function { head: Simple( FunctionHeadSimple { identifier: "cfg", }, ), body: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "cfg", span: Span { start: Position { line: 1272, column: 39, }, end: Position { line: 1272, column: 42, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "otpwAuth", span: Span { start: Position { line: 1272, column: 43, }, end: Position { line: 1272, column: 51, }, }, }, ), ], default: None, }, ), span: Span { start: Position { line: 1272, column: 34, }, end: Position { line: 1272, column: 51, }, }, }, ), ], }, ), IndentedString( IndentedString { parts: [ Raw( PartRaw { content: "mr ", span: Span { start: Position { line: 1273, column: 1, }, end: Position { line: 1273, column: 12, }, }, }, ), Interpolation( PartInterpolation { expression: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "pkgs", span: Span { start: Position { line: 1273, column: 14, }, end: Position { line: 1273, column: 18, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "otpw", span: Span { start: Position { line: 1273, column: 19, }, end: Position { line: 1273, column: 23, }, }, }, ), ], default: None, }, ), }, ), Raw( PartRaw { content: "/lib/security/pam_otpw.so,\n", span: Span { start: Position { line: 1273, column: 1, }, end: Position { line: 1274, column: 7, }, }, }, ), ], span: Span { start: Position { line: 1272, column: 54, }, end: Position { line: 1274, column: 9, }, }, }, ), ], }, ), }, ), operator: Addition, right: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "optionalString", span: Span { start: Position { line: 1275, column: 7, }, end: Position { line: 1275, column: 21, }, }, }, ), arguments: [ PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "config", span: Span { start: Position { line: 1275, column: 22, }, end: Position { line: 1275, column: 28, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "security", span: Span { start: Position { line: 1275, column: 29, }, end: Position { line: 1275, column: 37, }, }, }, ), Raw( PartRaw { content: "pam", span: Span { start: Position { line: 1275, column: 38, }, end: Position { line: 1275, column: 41, }, }, }, ), Raw( PartRaw { content: "enableEcryptfs", span: Span { start: Position { line: 1275, column: 42, }, end: Position { line: 1275, column: 56, }, }, }, ), ], default: None, }, ), IndentedString( IndentedString { parts: [ Raw( PartRaw { content: "mr ", span: Span { start: Position { line: 1276, column: 1, }, end: Position { line: 1276, column: 12, }, }, }, ), Interpolation( PartInterpolation { expression: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "pkgs", span: Span { start: Position { line: 1276, column: 14, }, end: Position { line: 1276, column: 18, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "ecryptfs", span: Span { start: Position { line: 1276, column: 19, }, end: Position { line: 1276, column: 27, }, }, }, ), ], default: None, }, ), }, ), Raw( PartRaw { content: "/lib/security/pam_ecryptfs.so,\n", span: Span { start: Position { line: 1276, column: 1, }, end: Position { line: 1277, column: 7, }, }, }, ), ], span: Span { start: Position { line: 1275, column: 57, }, end: Position { line: 1277, column: 9, }, }, }, ), ], }, ), }, ), operator: Addition, right: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "optionalString", span: Span { start: Position { line: 1278, column: 7, }, end: Position { line: 1278, column: 21, }, }, }, ), arguments: [ FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "isEnabled", span: Span { start: Position { line: 1278, column: 23, }, end: Position { line: 1278, column: 32, }, }, }, ), arguments: [ Function( Function { head: Simple( FunctionHeadSimple { identifier: "cfg", }, ), body: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "cfg", span: Span { start: Position { line: 1278, column: 39, }, end: Position { line: 1278, column: 42, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "pamMount", span: Span { start: Position { line: 1278, column: 43, }, end: Position { line: 1278, column: 51, }, }, }, ), ], default: None, }, ), span: Span { start: Position { line: 1278, column: 34, }, end: Position { line: 1278, column: 51, }, }, }, ), ], }, ), IndentedString( IndentedString { parts: [ Raw( PartRaw { content: "mr ", span: Span { start: Position { line: 1279, column: 1, }, end: Position { line: 1279, column: 12, }, }, }, ), Interpolation( PartInterpolation { expression: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "pkgs", span: Span { start: Position { line: 1279, column: 14, }, end: Position { line: 1279, column: 18, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "pam_mount", span: Span { start: Position { line: 1279, column: 19, }, end: Position { line: 1279, column: 28, }, }, }, ), ], default: None, }, ), }, ), Raw( PartRaw { content: "/lib/security/pam_mount.so,\n", span: Span { start: Position { line: 1279, column: 1, }, end: Position { line: 1280, column: 7, }, }, }, ), ], span: Span { start: Position { line: 1278, column: 54, }, end: Position { line: 1280, column: 9, }, }, }, ), ], }, ), }, ), operator: Addition, right: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "optionalString", span: Span { start: Position { line: 1281, column: 7, }, end: Position { line: 1281, column: 21, }, }, }, ), arguments: [ FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "isEnabled", span: Span { start: Position { line: 1281, column: 23, }, end: Position { line: 1281, column: 32, }, }, }, ), arguments: [ Function( Function { head: Simple( FunctionHeadSimple { identifier: "cfg", }, ), body: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "cfg", span: Span { start: Position { line: 1281, column: 39, }, end: Position { line: 1281, column: 42, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "enableGnomeKeyring", span: Span { start: Position { line: 1281, column: 43, }, end: Position { line: 1281, column: 61, }, }, }, ), ], default: None, }, ), span: Span { start: Position { line: 1281, column: 34, }, end: Position { line: 1281, column: 61, }, }, }, ), ], }, ), IndentedString( IndentedString { parts: [ Raw( PartRaw { content: "mr ", span: Span { start: Position { line: 1282, column: 1, }, end: Position { line: 1282, column: 12, }, }, }, ), Interpolation( PartInterpolation { expression: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "pkgs", span: Span { start: Position { line: 1282, column: 14, }, end: Position { line: 1282, column: 18, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "gnome", span: Span { start: Position { line: 1282, column: 19, }, end: Position { line: 1282, column: 24, }, }, }, ), Raw( PartRaw { content: "gnome-keyring", span: Span { start: Position { line: 1282, column: 25, }, end: Position { line: 1282, column: 38, }, }, }, ), ], default: None, }, ), }, ), Raw( PartRaw { content: "/lib/security/pam_gnome_keyring.so,\n", span: Span { start: Position { line: 1282, column: 1, }, end: Position { line: 1283, column: 7, }, }, }, ), ], span: Span { start: Position { line: 1281, column: 64, }, end: Position { line: 1283, column: 9, }, }, }, ), ], }, ), }, ), operator: Addition, right: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "optionalString", span: Span { start: Position { line: 1284, column: 7, }, end: Position { line: 1284, column: 21, }, }, }, ), arguments: [ FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "isEnabled", span: Span { start: Position { line: 1284, column: 23, }, end: Position { line: 1284, column: 32, }, }, }, ), arguments: [ Function( Function { head: Simple( FunctionHeadSimple { identifier: "cfg", }, ), body: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "cfg", span: Span { start: Position { line: 1284, column: 39, }, end: Position { line: 1284, column: 42, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "startSession", span: Span { start: Position { line: 1284, column: 43, }, end: Position { line: 1284, column: 55, }, }, }, ), ], default: None, }, ), span: Span { start: Position { line: 1284, column: 34, }, end: Position { line: 1284, column: 55, }, }, }, ), ], }, ), IndentedString( IndentedString { parts: [ Raw( PartRaw { content: "mr ", span: Span { start: Position { line: 1285, column: 1, }, end: Position { line: 1285, column: 12, }, }, }, ), Interpolation( PartInterpolation { expression: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "config", span: Span { start: Position { line: 1285, column: 14, }, end: Position { line: 1285, column: 20, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "systemd", span: Span { start: Position { line: 1285, column: 21, }, end: Position { line: 1285, column: 28, }, }, }, ), Raw( PartRaw { content: "package", span: Span { start: Position { line: 1285, column: 29, }, end: Position { line: 1285, column: 36, }, }, }, ), ], default: None, }, ), }, ), Raw( PartRaw { content: "/lib/security/pam_systemd.so,\n", span: Span { start: Position { line: 1285, column: 1, }, end: Position { line: 1286, column: 7, }, }, }, ), ], span: Span { start: Position { line: 1284, column: 58, }, end: Position { line: 1286, column: 9, }, }, }, ), ], }, ), }, ), operator: Addition, right: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "optionalString", span: Span { start: Position { line: 1287, column: 7, }, end: Position { line: 1287, column: 21, }, }, }, ), arguments: [ BinaryOperation( BinaryOperation { left: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "isEnabled", span: Span { start: Position { line: 1287, column: 23, }, end: Position { line: 1287, column: 32, }, }, }, ), arguments: [ Function( Function { head: Simple( FunctionHeadSimple { identifier: "cfg", }, ), body: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "cfg", span: Span { start: Position { line: 1287, column: 39, }, end: Position { line: 1287, column: 42, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "enableAppArmor", span: Span { start: Position { line: 1287, column: 43, }, end: Position { line: 1287, column: 57, }, }, }, ), ], default: None, }, ), span: Span { start: Position { line: 1287, column: 34, }, end: Position { line: 1287, column: 57, }, }, }, ), ], }, ), operator: LogicalAnd, right: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "config", span: Span { start: Position { line: 1288, column: 25, }, end: Position { line: 1288, column: 31, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "security", span: Span { start: Position { line: 1288, column: 32, }, end: Position { line: 1288, column: 40, }, }, }, ), Raw( PartRaw { content: "apparmor", span: Span { start: Position { line: 1288, column: 41, }, end: Position { line: 1288, column: 49, }, }, }, ), Raw( PartRaw { content: "enable", span: Span { start: Position { line: 1288, column: 50, }, end: Position { line: 1288, column: 56, }, }, }, ), ], default: None, }, ), }, ), IndentedString( IndentedString { parts: [ Raw( PartRaw { content: "mr ", span: Span { start: Position { line: 1289, column: 1, }, end: Position { line: 1289, column: 12, }, }, }, ), Interpolation( PartInterpolation { expression: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "pkgs", span: Span { start: Position { line: 1289, column: 14, }, end: Position { line: 1289, column: 18, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "apparmor-pam", span: Span { start: Position { line: 1289, column: 19, }, end: Position { line: 1289, column: 31, }, }, }, ), ], default: None, }, ), }, ), Raw( PartRaw { content: "/lib/security/pam_apparmor.so,\n", span: Span { start: Position { line: 1289, column: 1, }, end: Position { line: 1290, column: 7, }, }, }, ), ], span: Span { start: Position { line: 1288, column: 58, }, end: Position { line: 1290, column: 9, }, }, }, ), ], }, ), }, ), operator: Addition, right: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "optionalString", span: Span { start: Position { line: 1291, column: 7, }, end: Position { line: 1291, column: 21, }, }, }, ), arguments: [ FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "isEnabled", span: Span { start: Position { line: 1291, column: 23, }, end: Position { line: 1291, column: 32, }, }, }, ), arguments: [ Function( Function { head: Simple( FunctionHeadSimple { identifier: "cfg", }, ), body: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "cfg", span: Span { start: Position { line: 1291, column: 39, }, end: Position { line: 1291, column: 42, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "enableKwallet", span: Span { start: Position { line: 1291, column: 43, }, end: Position { line: 1291, column: 56, }, }, }, ), ], default: None, }, ), span: Span { start: Position { line: 1291, column: 34, }, end: Position { line: 1291, column: 56, }, }, }, ), ], }, ), IndentedString( IndentedString { parts: [ Raw( PartRaw { content: "mr ", span: Span { start: Position { line: 1292, column: 1, }, end: Position { line: 1292, column: 12, }, }, }, ), Interpolation( PartInterpolation { expression: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "pkgs", span: Span { start: Position { line: 1292, column: 14, }, end: Position { line: 1292, column: 18, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "plasma5Packages", span: Span { start: Position { line: 1292, column: 19, }, end: Position { line: 1292, column: 34, }, }, }, ), Raw( PartRaw { content: "kwallet-pam", span: Span { start: Position { line: 1292, column: 35, }, end: Position { line: 1292, column: 46, }, }, }, ), ], default: None, }, ), }, ), Raw( PartRaw { content: "/lib/security/pam_kwallet5.so,\n", span: Span { start: Position { line: 1292, column: 1, }, end: Position { line: 1293, column: 7, }, }, }, ), ], span: Span { start: Position { line: 1291, column: 59, }, end: Position { line: 1293, column: 9, }, }, }, ), ], }, ), }, ), operator: Addition, right: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "optionalString", span: Span { start: Position { line: 1294, column: 7, }, end: Position { line: 1294, column: 21, }, }, }, ), arguments: [ PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "config", span: Span { start: Position { line: 1294, column: 22, }, end: Position { line: 1294, column: 28, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "virtualisation", span: Span { start: Position { line: 1294, column: 29, }, end: Position { line: 1294, column: 43, }, }, }, ), Raw( PartRaw { content: "lxc", span: Span { start: Position { line: 1294, column: 44, }, end: Position { line: 1294, column: 47, }, }, }, ), Raw( PartRaw { content: "lxcfs", span: Span { start: Position { line: 1294, column: 48, }, end: Position { line: 1294, column: 53, }, }, }, ), Raw( PartRaw { content: "enable", span: Span { start: Position { line: 1294, column: 54, }, end: Position { line: 1294, column: 60, }, }, }, ), ], default: None, }, ), IndentedString( IndentedString { parts: [ Raw( PartRaw { content: "mr ", span: Span { start: Position { line: 1295, column: 1, }, end: Position { line: 1295, column: 12, }, }, }, ), Interpolation( PartInterpolation { expression: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "pkgs", span: Span { start: Position { line: 1295, column: 14, }, end: Position { line: 1295, column: 18, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "lxc", span: Span { start: Position { line: 1295, column: 19, }, end: Position { line: 1295, column: 22, }, }, }, ), ], default: None, }, ), }, ), Raw( PartRaw { content: "/lib/security/pam_cgfs.so\n", span: Span { start: Position { line: 1295, column: 1, }, end: Position { line: 1296, column: 7, }, }, }, ), ], span: Span { start: Position { line: 1294, column: 61, }, end: Position { line: 1296, column: 9, }, }, }, ), ], }, ), }, ), span: Span { start: Position { line: 1216, column: 53, }, end: Position { line: 1296, column: 9, }, }, }, ), }, ), ], span: Span { start: Position { line: 1162, column: 12, }, end: Position { line: 1297, column: 4, }, }, }, ), }, ), ], span: Span { start: Position { line: 750, column: 1, }, end: Position { line: 1299, column: 2, }, }, }, ), span: Span { start: Position { line: 8, column: 1, }, end: Position { line: 1299, column: 2, }, }, }, ), span: Span { start: Position { line: 6, column: 1, }, end: Position { line: 1299, column: 2, }, }, }, ), span: Span { start: Position { line: 4, column: 1, }, end: Position { line: 1299, column: 2, }, }, }, )